「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
- 3. 河合 宜文 / Kawai Yoshifumi / @neuecc
C#
Unity
株式会社グラニ
http://grani.jp/
- 4. gRPC + AWS
gRPC Application - API Service/Realtime Server
Monitoring and Tools
- 5. gRPC + AWS
gRPC Application - API Service/Realtime Server
Monitoring and Tools
- 30. gRPC based HTTP/2 RPC Streaming Framework
https://github.com/neuecc/MagicOnion
https://github.com/neuecc/MessagePack-CSharp/
- 31. gRPC based HTTP/2 RPC Streaming Framework
https://github.com/neuecc/MagicOnion
https://github.com/neuecc/MessagePack-CSharp/
- 33. public class TestService : ITestService
{
// パブリックメソッドがそのままgRPC定義
public async UnaryResult<int> Sum(int x, int y)
{
// async/awaitにも自然に対応
// マジカル技術によりasync Task<T>じゃなくてもawait可能
await Task.Yield();
return x + y;
}
}
// 普通のgRPCの接続を作る(MagicOnion用の特別なことはない)
var channel = new Channel("127.0.0.1:12345");
// 自然な書き味で、タイプセーフにRPC通信を実現
// C#のasync/await構文により、非同期通信も自然に見える
var client = MagicOnionClient.Create<ITestService>(channel);
var result = await client.Sum(100, 200);
struct DynamicTuple
{
public int item1;
public int item2;
}
- 35. // filter can attach per global/class/method
public class SampleFilterAttribute : MagicOnionFilterAttribute
{
public override async Task Invoke(ServiceContext context)
{
try
{
/* before invoke next */
await Next.Invoke(context);
/* after invoke next */
}
catch (Exception ex)
{
/* when exception */
}
finally
{
/* finalize */
}
}
}
- 41. var thread = GameLoopThreadPool.GetThread();
while (true)
{
var shouldContinue = frameAction(this);
if (!shouldContinue) break;
await thread.NextFrame();
}