MagicOnion
Unified Realtime/API framework for .NET platform and Unity.
MagicOnion について
MagicOnion は SignalR や Socket.io、WCF、Web ベースの API などの RPC メカニズムと同様に、.NET プラットフォーム向けの双方向リアルタイム通信を提供するモダンな RPC フレームワークです。
このフレームワークは gRPC を元にしており、高速でコンパクトなネットワークトランスポートである HTTP/2 に基づいています。ただし、通常の gRPC とは異なり、C# インターフェイスをプロトコルスキーマとして扱い、.proto
(Protocol Buffers IDL) なしで C# プロジェクト間でのコード共有を実現します。
インターフェースはスキーマであり、プレーンな C# コードと同様に API サービスを提供します。
StreamingHub リアルタイム通信サービスを使用することで、サーバーは複数のクライアントにデータを配信できます。
MagicOnion は MessagePack for C# を使用して呼び出しの引数と戻り値をシリアライズします。MessagePack オブジェクトにシリアライズできる NET プリミティブおよびその他の複雑な型を使用できます。シリアライゼーションの詳細については MessagePack for C# を参照してください。
ユースケース
MagicOnion は以下のユースケースで採用または置換できます:
- RPC サービス (Microservices で使用される gRPC や WinForms/WPF で一般的な WCF)
- Windows での WPF アプリケーション、Unity ゲームや .NET for iOS, Android, .NET MAUI など様々なプラットフォームとクライアントをターゲットとする ASP.NET Core Web API がカバーする API サービス
- Socket.io、SignalR、Photon、UNet などの双方向リアルタイム通信
MagicOnion は API サービスとリアルタイム通信のどちらもサポートしているため、様々なユースケースに適しています。これらの機能のどちらかのみを使用することもできますが、両方を組み合わせた構成もサポートされます。
技術スタック
MagicOnion は様々なモダンな技術の上に構築されています。
サーバーは ASP.NET Core 上に実装された gRPC サーバー (grpc-dotnet) 上に実装され、ASP.NET Core とその上の Grpc.AspNetCore.Server の機能を活用しています。これには DI やロギング、メトリクスや Hosting API なども含まれます。
ネットワークは HTTP/2 プロトコルを使用し、gRPC によるバイナリーメッセージングを活用しています。バイナリー表現には gRPC でよく使用される Protocol Buffers ではなく .NET との親和性や表現力の高い MessagePack を採用しています。
クライアントは .NET ランタイムだけでなく Unity ゲームエンジンのランタイムもサポートしています。これらのランタイムの上に .NET 標準の HttpClient を基盤とした gRPC クライアント (grpc-dotnet) を使用し、それを元に MagicOnion のクライアントライブラリを構築しています。