2

現在、2 つのエンコーダー、1 つのデコーダー、およびChannelInboundMessageHandlerAdapter<ByteBuf>. エンコーダは aMessageToByteEncoder<Packet>および aByteToByteEncoderです。ChannelOutboundMessageHandlerAdapteraと aを使用してみましたChannelOutboundByteHandlerAdapterが、どちらも問題を解決しませんでした。最初のエンコーダー (PacketEncoderまたはMessageToByteEncoder<Packet>) には問題なく入力されますが、ByteToByteEncoderあとがきには入力できず、データはサーバーに送信されません。

私のパイプラインは次のように設定されています。

ChannelPipeline pipeline = ch.pipeline();
// Decoders
pipeline.addLast("buffer_length_decoder", new BufferLengthDecoder());
pipeline.addLast("packet_decoder", new PacketDecoder());

// Encoder
pipeline.addLast("buffer_length_encoder", new BufferLengthEncoder());
pipeline.addLast("packet_encoder", new PacketEncoder());

PacketEncoder は次のようになります。

public class PacketEncoder extends MessageToByteEncoder<Packet> {
    private static final Logger logger = LoggerFactory.getLogger(PacketEncoder.class);

    @Override
    protected void encode(ChannelHandlerContext ctx, Packet msg, ByteBuf out) throws Exception {
        ByteBuf buf = msg.buf();
        buf = buf.capacity(buf.readableBytes());
        logger.info(Utils.toHexString(buf.array()));
        out.writeBytes(buf);
    }
}

BufferLengthEncoder は次のようになります。

public class BufferLengthEncoder extends ByteToByteEncoder {
    private static final Logger logger = LoggerFactory.getLogger(BufferLengthEncoder.class);

    @Override
    protected void encode(ChannelHandlerContext ctx, ByteBuf in, ByteBuf out) throws Exception {
        logger.info(Utils.toHexString(in.array()));
        out = out.writeInt(in.readableBytes()).writeBytes(in);
    }
}

パイプラインでの順序を変更しようとしましたが、役に立ちませんでした。どこかで無意味な何かを見逃しているだけだと思いますが、どこで何をしているのかわかりません。どんな助けでも大歓迎です。

前もって感謝します!

4

1 に答える 1

0

私には奇妙に聞こえます...問題を示す単体テストを作成し、それがバグであることを確認してから問題を開いていただけますか?

https://github.com/netty/netty/issues

于 2013-03-28T07:13:29.107 に答える