对于我的应用程序,我希望能够发送和接收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);
}
});