3

自分のサーバーを実装するために netty をいじり始めました。コツをつかむのに少し時間がかかりましたが、独自の MessageHandler を作成することでクライアントを受け入れることができ、messageReceived 内でバッファーから読み取り、受信したデータに関連するビジネス ロジックを実行できるようになりました。

しかし、問題は、接続されたクライアントにデータを書き込むにはどうすればよいかということです。次のような新しいメッセージが発生した場合にチャネルに書き込むことができるサンプル コードを見ました。

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    Channel ch = e.getChannel();
    ch.write(e.getMessage());
}

しかし、その時点でデータを書き戻したくない場合はどうすればよいでしょうか? クライアントがソケットに接続されたままで、サーバーで何らかのイベントが発生するまで待機するとどうなるでしょうか? その場合、サーバーはどのようにして書き込み先の正しいソケットを見つけるのでしょうか? チャネル オブジェクトへの参照を保持する必要がありますか? これはコンベンションですか?

コードをさらに調べたところ、writeRequested というメソッドが見つかりました。それは関係ありますか?誰がそれを呼んでいますか?そして、それは必要ですか?

4

1 に答える 1

6

Channel (または ChannelHandlerContext) への参照がある限り、どこからでも、任意のスレッドから Channel.write() (または Channels.write()) を呼び出すことができます。

Channel.write() を呼び出すか、ChannelHandlerContext.sendDownstream(MessageEvent) を呼び出して writeRequested イベントをトリガーすると、writeRequested() が呼び出されます。

于 2010-07-11T15:34:44.443 に答える