2

の呼び出しServerBootstrap.bind()は a を返しますがChannel、これはConnectedステータスにないため、クライアントへの書き込みには使用できません。

Netty ドキュメントのすべての例は、ChannelそのChannelHandlerイベントから への書き込みを示していますchannelConnected- I want to get a connected Channel not in the event but as a reference outside the event , 私のサーバーコンポーネントを使用するいくつかのクライアントコードを言ってみましょう. 1 つの方法は、イベントを待機してからチャネル参照をコピーするように手動でコーディングするchannelConnectedことですが、これは車輪の再発明になる可能性があります。

質問は次のとおりです。Netty で、Connected Channel を返すブロッキング コールはありますか?

編集: Nio ではなく Oio Channels を使用しています。

4

2 に答える 2

1

上記のすべての交換の後、私はまだこれのいずれかが必要であるとは思いません。

確かにあなたがしなければならないのは、外部サービスからの接続を受け入れることだけです。イベントに登録しないでください。次に、他のクライアントが接続したら、両方のチャネルでI/Oイベントに登録します。

外部サービスは、別の接続を待機しているスレッドでブロックされているのか、それとも他の理由で応答していないのかを認識または気にしません。

彼があなたに手紙を書いている場合、あなたが実際に彼から読んでいない限り、あなたがブロックしているかどうかにかかわらず、あなたのソケット受信バッファのサイズまで、彼の書き込みはとにかく成功します。そのバッファがいっぱいになると、あなたがそれを読むまで彼はブロックします。

彼があなたから読んでいる場合、彼はあなたが何かを送るまでブロックします、そして再びあなたがその間にしていることは彼には見えません。

ですから、思考を単純化し、ノンブロッキングI/Oの素晴らしい世界にもっと合わせる必要があると思います。

于 2012-05-11T13:10:54.497 に答える