我正在研究 Apache PLC4X 项目,我们使用 Netty 实现工业 PLC 协议。一旦响应的大小超过 512 字节的限制,我们目前就会遇到解码响应的问题。
一旦响应的大小超过这 512 个字节,我们基于 MessageToMessageCodec 的协议层实现的解码方法就只接收一个 512 字节的大 ByteBuf。紧接着,该方法与数据包的其余部分一起再次调用。
如何处理这个问题的正确方法?
我正在研究 Apache PLC4X 项目,我们使用 Netty 实现工业 PLC 协议。一旦响应的大小超过 512 字节的限制,我们目前就会遇到解码响应的问题。
一旦响应的大小超过这 512 个字节,我们基于 MessageToMessageCodec 的协议层实现的解码方法就只接收一个 512 字节的大 ByteBuf。紧接着,该方法与数据包的其余部分一起再次调用。
如何处理这个问题的正确方法?
您应该使用ByteToMessageDecoder
此处允许您获取buffer
数据。有关如何存档的更多详细信息,请参阅 javadocs。但基本上它是这样的:
YourDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
if (in.readableBytes() < 1024) {
return;
}
....
}
}