だから、私はMessage
送信したいすべての情報を含むクラスを持っています。ただし、その内容は大きく異なる場合があります。
Netty チャネルを介してそのような種類のオブジェクトを送受信する (特にデコード/再アセンブリ部分) 最も簡単な方法は何ですか? (Netty 3 を使用)
だから、私はMessage
送信したいすべての情報を含むクラスを持っています。ただし、その内容は大きく異なる場合があります。
Netty チャネルを介してそのような種類のオブジェクトを送受信する (特にデコード/再アセンブリ部分) 最も簡単な方法は何ですか? (Netty 3 を使用)
4 バイト長のプレフィックスを使用します。送信側ではOneToOneEncoderのサブクラスを使用し、受信側ではLengthFieldBasedFrameDecoderのサブクラスを使用します。
メッセージを書く:
private static final byte[] LENGTH_PLACEHOLDER = new byte[4];
ChannelBufferOutputStream bout =
new ChannelBufferOutputStream(dynamicBuffer(512, ctx.getChannel().getConfig().getBufferFactory()));
bout.write(LENGTH_PLACEHOLDER);
// write message contents here ...
ChannelBuffer encoded = bout.buffer();
encoded.setInt(0, encoded.writerIndex() - 4);
return encoded;
LengthFieldBasedFrameDecoder のコンストラクタ パラメータ:
private static final int MAX_OBJECT_SIZE = 1 << 21;
public MyDecoder()
{
super(MAX_OBJECT_SIZE, 0, 4, 0, 4);
}
メッセージを読む:
ChannelBuffer frame = (ChannelBuffer) super.decode(ctx, channel, buffer);
if (frame == null) {
return null;
}
ChannelBufferInputStream data = new ChannelBufferInputStream(frame);
// read message here ...