在使用netty(带有camel)时遇到一个奇怪的错误,我们使用LengthFieldBasedFrameDecoder进行通信,客户端是第三方的socket程序,我们在服务器端使用netty(camel-netty组件)。
有时会将两条消息“合并”为一条,因此即将到来的数据全部错误。
例如:
客户端发送两条消息:
[10]啊啊啊啊啊啊啊啊 和 [10]BBBBBBBBBBBBBBBB
其中 [10] 是长度字节,AAAAAAAAAA 是数据。
但是在服务器上我们得到了 [10]AAAAAA[10]BBBBBBBBBBBBBBBBAAAAAAAAA
似乎第一条消息被第二条消息分割,因此解码器将数据解释为:
[10]AAAAAA[10]BBBBBBBB
和
BBBBBBBB啊啊啊啊啊啊…………………… ......
这样第一个消息长度正确,但数据错误,而第二个消息长度“BB”错误,得到一个更长的数据包。
希望我描述清楚,有人以前遇到过这个吗?
最佳答案
听起来您正在两个线程中写入同一个流。
关于java - Netty中的缓冲区损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637486/