0

netty javadocは、setReadableがI/Oスレッドの読み取り操作を一時停止/再開すると説明しています。私の質問は、その間にデータで何が起こっているのかということです。サーバーのチャネルでsetReadable(false)を実行し、反対側のクライアントがソケットにデータを書き込んでいるとしましょう。データはどこに送られますか?バッファがいっぱいになりますか?このバッファを制御したり、オーバーフローしたときに通知を受け取ったりする方法はありますか?

I/Oスレッドの読み取り操作を非同期的に一時停止または再開します。このメソッドは、次のコードへのショートカットです。

int InterestOps = getInterestOps(); if(読み取り可能){setInterestOps(interestOps | OP_READ); } else {setInterestOps(interestOps&〜OP_READ); }

ディスパッチするデータがすでにあるチャネルでsetReadable(false)を呼び出すと、データが取得されることに注意してください。したがって、ハンドラーの1つでchannelOpen内でsetReadable(false)を呼び出すと、クライアントが接続したとおりに書き込む場合でも、そのトンネルでmessageReceivedを取得します。 この問題で説明されているように

4

1 に答える 1

1

チャネルから読み取るために、関心のある ops を削除します。これは、OS がネットワーク スタック内のすべてをバッファリングする必要があることを意味します。このバッファがいっぱいになると、新しいパケットは破棄されます。

このバッファを調整する方法は、オペレーティング システムに固有です。Linux では、/proc fs 経由で実行できます。

于 2012-04-27T11:31:34.787 に答える