私はいくつかのJavaTCP/ IPネットワークコード(クライアント-サーバー)を書いています。このコードでは、送信が受信よりもはるかに高速であるため、一方の端で送信操作がブロックされるシナリオに対処する必要があります。(sendおよびrecvバッファーがいっぱいになるため)。コードを設計するために、最初にこのような状況を試して、さまざまな負荷の下でクライアントとサーバーがどのように動作するかを確認したいと思いました。しかし、この背圧を達成するためのパラメータを適切に設定することはできません。値を小さく設定Socket.setSendBufferSize(int size)
してみSocket.setReceiveBufferSize(int size)
ましたが、すぐにいっぱいになることを期待していますが、クライアントが既に書き込まれたデータを十分に消費するのを待たずに、送信操作が完了することがわかります。(これは、sendおよびrecvのバッファサイズが小さいと効果がないことを意味します)
私が取ったもう1つのアプローチは、Nettyを使用して設定することServerBootstrap.setOption("child.sendBufferSize", 256);
ですが、これでもあまり役に立ちません。誰かが私が間違っていることを理解するのを手伝ってくれますか/