有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java NETTY问题客户端1024字节消息

我想直接报告这个错误,但在主页netty上还没有发现任何可能性。木卫一

我注意到向通道发送数据时出错。在10-20%的病例中,这种情况并不总是发生,但确实发生了。 接下来

  1. 例如,如果我第一次连接到1024字节数据的消息,到目前为止一切都很好,然后我用HexDumpProxyInboundHandler创建socket到转发地址

  2. 这里一切都很好,除了一件事,我在转发地址上创建了一个侦听器,并记录了流量,从中我可以得到Netty发送的消息。我希望它包含1024字节的数据,但这种情况并不总是发生,在100%的情况下也不会发生。 有时候

  3. 有时候噩梦就从这里开始, 如果在1024字节的消息之后,我在同一频道收到下一条消息,数据将以以下可能的形式写入:

3.1第一条消息和第二条消息被合并,并且我在端口侦听器上获得的数据是正确的,1024+72(例如)和正确的字节顺序(但在合并形式中,我已经不正确了)

3.2或者第一条消息和第二条消息也合并了,但有一点不同,顺序不同,72字节(例如)+1024字节,即使服务器socket正确地接收了数据,并且顺序正确。。发送顺序也不正确

3.3或者最后,1024条消息中的第一条消息被发送为,第二条消息也被发送为,所以这里的一切都很好,这是正确的和预期的行为

此外,错误并不总是发生,但总是会发生,而且如果发生,只有通过第一次连接,第一条消息的长度为1024字节,并且第二条消息在第一条消息之后立即发送,之前没有接收到数据,才会发生错误

现在社区面临的问题是,在Netty中是否有可能关闭这种奇怪的缓冲行为?因此,在服务器socket上接收的所有消息都以完全相同的方式发送到客户端socket通道,而无需合并数据

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    这种“奇怪”的行为与内蒂无关。一次传输多少字节取决于网络层,所以我们真的希望看到这一点。如果你需要拥有全部1024字节,在你收到足够的数据之前,你不需要缓冲它们

  2. # 2 楼答案

    好吧,经过漫长的夜晚,我终于解决了我的问题。看起来,Netty项目在这种情况下仍然存在缺陷,并且会接受以错误顺序发送的传入消息。 所以,我要做的是,用传入消息填充缓冲区,直到客户端的远程连接被打开,所以我发送的不是完整的正确缓冲区,而是让Netty来做事情