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!
Ruby
https://github.com/aki017/zero_formatter
Swift
https://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構文で同期的にOK
var 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

ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC