remote_window_leftは十分ではありません

背景:ビジネスニーズのため、クライアントはbrpcを使用し、サーバーはgrpc c ++バージョン1.23.0を使用します。クライアントが毎回100万のデータを要求すると、クライアントはremote_window_leftが十分なエラーではないと報告します。

ポジショニング方法:両当事者のhellowordの例(brpchelloクライアントがgrpchelloサーバーを要求)を使用してテストします。問題はなく、サーバー側が特別な起動パラメーターを使用している可能性があります。

サーバーコードを表示します。

ServerBuilder       builder;
builder.AddListeningPort(server_address_, grpc::InsecureServerCredentials()); 
builder.SetResourceQuota(quota.SetMaxThreads(128));
builder.AddChannelArgument(GRPC_ARG_HTTP2_BDP_PROBE, 0);    // 注释调这一行就没有问题了
builder.AddChannelArgument(GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES, 4*1024*1024); 
builder.RegisterService((grpc::Service *)this);     
server_ = builder.BuildAndStart();

 最終的な解決策:comment builder.AddChannelArgument(GRPC_ARG_HTTP2_BDP_PROBE、0);

 では、なぜコメントした後に使いやすいのでしょうか。

tlwはトランスポートローカルウィンドウの略語、50051はサーバーのポート番号、

コメントなし

1)tcpdumpを介してパケットをキャプチャします。

2)サーバー側のフロー制御ログ:

0x7f699c0030d8 [0] [svr] | tupdtが送信されました| trw:65535、tlw:65535、 taw:65535、srw:、slw:、saw:

0x7f699c0030d8 [0] [svr] | t updt recv | trw:65535- > 1048576 、tlw:65535、 taw:65535、srw:、slw:、saw:

データの観点から、ローカルに記録されたウィンドウサイズは、クライアントに通知されたウィンドウサイズと一致していません。

注釈後のシーン:

1)tcpdumpを介してパケットをキャプチャします

2)サーバー側のフロー制御ログ:

0x7fd648003098 [0] [svr] | tupdtが送信されました| trw:65535、tlw:4194304、 taw:65535-> 4194304、srw:、slw:、saw:

0x7fd648003098 [0] [svr] | t updt recv | trw:65535- > 1048576 、tlw:4194304、 taw:4194304、srw:、slw:、saw:

データの観点から、ローカルに記録されたウィンドウサイズは、クライアントに通知されたウィンドウサイズと同じです。

疑問に思う:

ビルダーを介して、brpc c ++のバグかどうかはわかりません。AddChannelArgument(GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES、4 * 1024 * 1024)

ローカル変数の値ではなく、設定フレームの値を変更しただけです。

最近github.comに接続できないため、最新バージョンを試すことができません。

 

おすすめ

転載: blog.csdn.net/zgb40302/article/details/114933556
おすすめ