Work
C#
Unity
Private
http://neue.cc/
@neuecc
https://github.com/neuecc/UniRx
Message Format
XML
JSON
Protocol Buffers
MsgPack
Thrift
Avro
FlatBuffers
Cap’n Proto
パフォーマンス #とは
その他
遅い、(特に)(古い)Android遅い...
遅い、(特に)(古い)Android遅い...
秘訣は...
無限大高速なシリアライザ
https://github.com/neuecc/ZeroFormatter/
シリアライズも速い
無限大高速なシリアライザ
https://github.com/neuecc/ZeroFormatter/
シリアライズも速い
アクセサーとしてのオブジェクト
全部は必要ない
C#自体をスキーマとみなす
継承みたいなやつをネイティブサポート
[Union(typeof(Human), typeof(Monster))]public interface ICharacter{
[UnionKey]int TypeId { get; }
}
public class Human : ICharacter{
public int TypeId => 0;}
public class Monster : ICharacter{
public int TypeId => 1;}
Welcome to contribute!
Rubyhttps://github.com/aki017/zero_formatter
Swifthttps://github.com/yaslab/ZeroFormatter.swift
RPC
言語の違うREST
Response型を別々に書く
APIクライアントを手書きする
(ザ・マイクロサービスみたいな
構成)
言語の違うREST
Response型を別々に書く
APIクライアントを手書きする
(ザ・マイクロサービスみたいな
構成)
中間IDLを書くそこからクライアント・レスポンス型自動生成
(←を嫌う時によくある構成、一番メジャー)
自動生成はダルい
自動化は(必ずしも)よくない
言語の違うREST
Response型を別々に書く
APIクライアントを手書きする
(ザ・マイクロサービスみたいな
構成)
中間IDLを書くそこからクライアント・レスポンス型自動生成
(←を嫌う時によくある構成、一番メジャー)
サービスを普通に書く、そこからクライアントを自動生成、リクエスト・レスポンス型はC#のDLLとして
共有
言語の違うREST
Response型を別々に書く
APIクライアントを手書きする
(ザ・マイクロサービスみたいな
構成)
中間IDLを書くそこからクライアント・レスポンス型自動生成
(←を嫌う時によくある構成、一番メジャー)
サービスを普通に書く、そこからクライアントを自動生成、リクエスト・レスポンス型はC#のDLLとして
共有
サービスを普通に書く、クライアントはそのプロジェクト参照から実行時動的生成
gRPC based C# Network Framework
gRPCの性能や安定性 + C#的な使いやすさ
public class TestService : MagicOnionService{
// ふつーにpublicメソッドを定義するだけpublic async Task<int> Sum(int x, int y){
return x + y;}
public async Task<string> Download(string url){
// 非同期もasync/await構文で同期的にOKvar result = await new HttpClient().GetStringAsync(url);return result;
}}
// ふつーのgRPCのコネクションvar channel = new Channel("127.0.0.1:12345");
// .Service<T>でクライアントが実行時動的生成されてシームレスに呼び出し可能var result = await new MagicOnionClient(channel).Service<TestService>().Sum(100, 200);
struct ZeroFormatter$AutoGenerate$1{
public int x;public int y;
}
gRPC IN(byte[])
gRPC OUT(byte[])
RPC Method
Middleware
IDL Less HandlerSelector
HTTP1 Gateway
Swagger
SerializerSelector(ZeroFormatter, JSON)
機能
Conclusion
C#で統一することの強み言語単体で優劣を語ってもそこまで意味はない
XはY言語だから出来た!という話は、大抵は別にPHPでもCでもなんでも、普通に出来る次元の話がほとんど。特に関数型言語の人に多い話な気もしますが
が、システム全体で統一していくことにより、強みを乗算する
単一であることの弱みは当然ある(No Silver Bullet)が、それを遥かに勝る強みを作っていくことで最高の環境にしていきたい(Windows Serverに対するコダワリはないのでLinuxでは動かしたい!)
パフォーマンスは最大の機能ZeroFormatterもMagicOnionも、それを最も強く意識してる
using