3

クライアント チャネルは netty で書き込み可能な状態ではありません。専門家が理由を見つけるために私を導くことができますか

チャネルが常に書き込み可能な状態にないのはなぜですか?

書き込み可能な状態ではないため、スレッドはスリープ モードになっています。スレッド ダンプを使用してスレッドの状態を分析し、次のループにカウンターを追加し、1 分間待機してからループを終了しました。しかし、私は本当に書き込み不可の理由を理解したいと思っています。

チャネルを閉じた後、チャネルは ctx に残っていますか (クライアントから EOF が送信されない場合)?

これが起こる可能性がある場合(書き込み可能な状態にならないことを意味します)?

while (!ctx.getChannel().isWritable()) {
    Thread.sleep(100);
    }

助けてください。

どうもありがとうございました

4

2 に答える 2

1

セレクターまたは Netty が提供するものを使用して、チャネルがいつ書き込み可能かを通知する必要があります。ループで寝て、文字通り時間を無駄にするべきではありません。その間、チャネルの状態は変更できません。によってのみ変更されます。select().

于 2013-03-07T04:48:46.307 に答える
1

表面的には、これは ChannelBuffer がいっぱいである、つまり、書き込み可能なバイトがないためです。

書き込みが速すぎるか、チャネルがバイトを送信できないことが原因である可能性があります。書き込んでいる速度が速すぎない場合は、チャネルが書き込まれたバイトを正常に送信していないことが原因である可能性があります。

于 2013-03-07T04:50:13.423 に答える