java NETTY问题客户端1024字节消息
我想直接报告这个错误,但在主页netty上还没有发现任何可能性。木卫一
我注意到向通道发送数据时出错。在10-20%的病例中,这种情况并不总是发生,但确实发生了。 接下来
例如,如果我第一次连接到1024字节数据的消息,到目前为止一切都很好,然后我用HexDumpProxyInboundHandler创建socket到转发地址
这里一切都很好,除了一件事,我在转发地址上创建了一个侦听器,并记录了流量,从中我可以得到Netty发送的消息。我希望它包含1024字节的数据,但这种情况并不总是发生,在100%的情况下也不会发生。 有时候
有时候噩梦就从这里开始, 如果在1024字节的消息之后,我在同一频道收到下一条消息,数据将以以下可能的形式写入:
3.1第一条消息和第二条消息被合并,并且我在端口侦听器上获得的数据是正确的,1024+72(例如)和正确的字节顺序(但在合并形式中,我已经不正确了)
3.2或者第一条消息和第二条消息也合并了,但有一点不同,顺序不同,72字节(例如)+1024字节,即使服务器socket正确地接收了数据,并且顺序正确。。发送顺序也不正确
3.3或者最后,1024条消息中的第一条消息被发送为,第二条消息也被发送为,所以这里的一切都很好,这是正确的和预期的行为
此外,错误并不总是发生,但总是会发生,而且如果发生,只有通过第一次连接,第一条消息的长度为1024字节,并且第二条消息在第一条消息之后立即发送,之前没有接收到数据,才会发生错误
现在社区面临的问题是,在Netty中是否有可能关闭这种奇怪的缓冲行为?因此,在服务器socket上接收的所有消息都以完全相同的方式发送到客户端socket通道,而无需合并数据
提前谢谢
# 1 楼答案
这种“奇怪”的行为与内蒂无关。一次传输多少字节取决于网络层,所以我们真的希望看到这一点。如果你需要拥有全部1024字节,在你收到足够的数据之前,你不需要缓冲它们
# 2 楼答案
好吧,经过漫长的夜晚,我终于解决了我的问题。看起来,Netty项目在这种情况下仍然存在缺陷,并且会接受以错误顺序发送的传入消息。 所以,我要做的是,用传入消息填充缓冲区,直到客户端的远程连接被打开,所以我发送的不是完整的正确缓冲区,而是让Netty来做事情