.NET 6.0 の Windowsフォームアプリから、MagicOnion NuGetパッケージを使い、gRPC通信処理を行う 前回作成したサンプル に、シリアライズされたMessagePackの通信データを Lz4圧縮する処理を加えました。これによりMagicOnionの通信データ量、通信処理実行時のメモリ使用量は10分の1程度になります。
ソースコードは GitHub で公開しています。
クライアントとサーバ両方の ContractlessStandardResolver.Options に、WithCompression(MessagePackCompression.Lz4Block) を加えるだけです。
MagicOnion サーバ側
ソースコード構成
ソースコード変更内容を解説
/Program.cs
WithCompressionを設定する処理を追加。
※WithCompressionを設定する処理は、サーバ側とクライアント側の両方に追加する必要がある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using ClassLibrary1.Interface; using MagicOnion; using MagicOnion.Server; using MessagePack.Resolvers; using MessagePack; var Resolver = CompositeResolver.Create( NativeDateTimeResolver.Instance, NativeDecimalResolver.Instance, DynamicGenericResolver.Instance, ColorResolver.Instance, ContractlessStandardResolver.Instance ); var options = ContractlessStandardResolver.Options.WithResolver(Resolver) .WithCompression(MessagePackCompression.Lz4Block); MessagePackSerializer.DefaultOptions = options; var builder = WebApplication.CreateBuilder(args); builder.Services.AddGrpc(); builder.Services.AddMagicOnion(); var app = builder.Build(); app.MapMagicOnionService(); app.MapGet("/", () => "Hello World!"); app.Run(); |
MagicOnion クライアント側
ソースコード構成
ソースコード変更内容を解説
/Program.cs
WithCompressionを設定する処理を追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using ClassLibrary1.Interface; using MessagePack.Resolvers; using MessagePack; namespace WinFormsApp1 { internal static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { var Resolver = CompositeResolver.Create( NativeDateTimeResolver.Instance, NativeDecimalResolver.Instance, DynamicGenericResolver.Instance, ColorResolver.Instance, ContractlessStandardResolver.Instance ); var options = ContractlessStandardResolver.Options.WithResolver(Resolver) .WithCompression(MessagePackCompression.Lz4Block); MessagePackSerializer.DefaultOptions = options; // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); Application.Run(new Form1()); } } } |
コメント