0

Netty javadoc は、エンコーダーの一般的な使用法を次のように示しています。

デコーダー --> エンコーダー --> (messageReceived) ハンドラー (書き込み)。

さて、書き込まれたメッセージをエンコードするために何をしたいのですか(つまり、ハンドラーの書き込みメソッドで処理されたメッセージを意味します)。したがって、デコーダーを見つける適切な方法は次のとおりだと思います..

Decoder --> (messageReceived) Handler (Write) --> Eecoder

Decoder は Object を返すので、それは適切なメッセージなのだろうか.. write メソッドの後にメッセージをエンコードしたい場合、どうすればよいか教えてください。

あなたの提案は大歓迎です。

4

2 に答える 2

2

ここで javadoc を見てみましょう: http://netty.io/4.0/api/

アップストリームとダウンストリームについて話している場合、Netty4 ではこれらはインバウンドとアウトバウンドと見なされます。ドキュメントは時々両方を参照します。

特に例を見てください: (少し変更しました)

 ChannelPipeline p = ...;
 p.addLast("1", new InboundHandlerA());
 p.addLast("2", new InboundHandlerB());
 p.addLast("3", new OutboundHandlerA());
 p.addLast("4", new OutboundHandlerB());
 p.addLast("5", new HandlerX());

この例では、Inbound* という名前の ChannelHandlers が ChannelInboundHandler を実装しています。Outbound という名前の ChannelHandler は、ChannelOutboundHandler を実装します。

HandlerX は、受信メッセージ イベントを処理し、チャネルへの書き込みによって送信メッセージ イベントを生成するため、ChannelInboundHandler を実装します。

Inbound イベント (チャネルがバインドされているソケットに送信されたデータを Netty が読み取るなど) がある場合、InboundHandler* が上から下に順に実行されます。

InboundHandlerA -> InboundHandlerB -> HandlerX

Outbound イベント (チャネルへの HandlerX の書き込みなど) がある場合、OutboundHandler* は下から上に順に実行されます。

OutboundHandlerB -> OutboundHandlerA.

拡張機能として、インバウンドとアウトバウンドの両方を実装し、パイプラインの実行で 2 回呼び出される ChannelHandler を持つことができます。

したがって、あなたの場合、次のようなものが必要です

 ChannelPipeline p = ...;
 p.addLast("DECODER", new MyMessageDecoder());
 p.addLast("ENCODER", new MyMessageEncoder());
 p.addLast("HANDLER", new MyHandler());

ここで、MyMessageDecoder と MyHandler は ChannelInboundHandler を実装し、MyMessageEncoder は ChannelOutboundHandler を実装します。

于 2013-03-06T04:14:26.227 に答える
0

通常、次のように配置します。

Encoder1、Encoder2、Decoder1、Decoder2、その他のハンドラー

于 2013-03-04T19:55:02.820 に答える