在Netty中发送和接收CompositeByteBuf

时间:2014-11-12 13:36:26

标签: java netty

对于我的应用程序,我希望能够发送和接收CompositeByteBuf。 我正在使用MessageToMessageEncoder<CompositeByteBuf>,但我可以 成功发送(等待通过channelFuture.sync()写入,然后检查channelFuture.isDone()它是否属实),在接收方,我什么都没得到。 我肯定错过了什么。另外,另一个相关问题是什么 发送包含组件的CompositeByteBuf的最有效方法 特大号?例如,最大尺寸的直接ByteBufs。现在它无法用于非常小的缓冲区(测试),但最终这将用于大型直接堆外缓冲区。

以下是我的编码部分:

pipeline.addLast("snappy encoder", new SnappyFrameEncoder());
pipeline.addLast("frameEncoder", new LengthFieldPrepender(8));
pipeline.addLast("bytesEncoder", new MessageToMessageEncoder<CompositeByteBuf>() {
    @Override
    protected void encode(ChannelHandlerContext ctx, CompositeByteBuf msg, List<Object> out) throws Exception {
        out.add(msg);
    }
});

解码部分:

pipeline.addLast("snappy decoder", new SnappyFrameDecoder());
pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(
      IGraphConstants.NETTY_MAX_FRAME_SIZE, 0, 8, 0, 8));   
pipeline.addLast("bytesDecoder", new MessageToMessageDecoder<CompositeByteBuf>() {
    @Override
    protected void decode(ChannelHandlerContext ctx, CompositeByteBuf msg, List<Object> out) throws Exception {
        msg.retain();
        out.add(msg);
    }
});

0 个答案:

没有答案