2012-04-12 12 views
0

Nettyチャネルを使用するTCPベースのサーバー - クライアントモデルでは、サーバーからのChannel.write()の番号と受信クライアントの対応するChannel.messageReceived()の間に対応がありますか?送信者に10 writes()を実行した場合、受信クライアントでmessageReceived()が10回呼び出されることを意味しますか?またはNettyは、送信されたデータ(送信者のwrite())をクライアントのmessageReceived()イベントの多かれ少なかれに集約できますか? Nettyでこの動作を設定する方法はありますか?NettyのChannel.messageReceivedイベント

答えて

1

Channel.write(..)とmessageReceived呼び出しのマッピングが1:1であるとは限りません。サーバー上のChannelPipelineの次のChannelHandlerにメッセージをディスパッチするのに十分なデータを受け取るまで、FrameBecerをバッファリングするFrameDecoderサブクラスを使用する必要があります。

Nettyには、デリミタを受け取ってChannelPipelineの次のハンドラにディスパッチするまでデータをバッファリングするように注意する、DelimiterBasedFrameDecoder(たとえば)のような、すぐに使用できるFrameDecoder実装がいくつか用意されています。

詳細は[1]を参照してください。

[1] http://netty.io/docs/stable/api/org/jboss/netty/handler/codec/frame/FrameDecoder.html

0

はい、これを行う方法はありますが、何か他のことを行うにはもっとわれわれに提供しなければなりません。