java - NETTY ISSUE 客户端 1024 字节消息

标签 java netty

我想直接报告这个错误,但在netty.io主页上还没有找到任何可能性

我在向 channel 发送数据时注意到一个错误。这种情况并不总是发生,在 10-20% 的情况下,但它确实发生了。 以下,

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

  2. 这里一切都很好,除了一件事,我在转发地址上创建了一个带有流量日志记录的监听器,我在其中获取 Netty 发送的消息。我期望其上有 1024 字节的数据,但这种情况并不总是发生,也不是在 100% 的情况下发生。 有时...

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

3.1 第一条消息和第二条消息被合并,并且我在端口监听器上获得的数据是正确的,1024 + 72(作为示例)并且字节顺序也正确(但以合并的形式,已经不正确的数据)对我来说)

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

3.3 或最后,1024 的第一条消息按原样发送,第二条消息也按原样发送,因此这里一切都很好,这是正确且预期的行为。

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

现在社区的问题是,是否可以在 Netty 中关闭这种奇怪的缓冲行为?这样服务器套接字上收到的所有消息都会以完全相同的方式发送到客户端套接字 channel ,而无需合并数据。

提前谢谢您!

最佳答案

这种“奇怪”的行为与netty无关。一次传输多少字节由网络层决定,因此确实希望看到这一点。如果您需要全部 1024 字节,则需要缓冲它们,直到收到足够的字节。

关于java - NETTY ISSUE 客户端 1024 字节消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11100864/

相关文章:

gradle - IntelliJ项目 “JS Client and JVM Server | Gradle”不起作用

java - 互联网连接和广播接收器

java - 为什么在 Android 上使用 db.exec() 时不需要捕获 SQLExecption?

java - grpc-java的ServerBuilder中executor的具体用途是什么?它只是执行处理程序方法吗?

java - 简单的 Netty Http-Server 只返回 "Hello World"

java - 即使业务逻辑是纯CPU操作,是否也需要在channelread方法中启动一个新线程来执行业务逻辑?

java - 使用java将数据写入顺序文本文件

java - 删除旧的 .lck 文件

java - 6.2 版本的 drools 弃用代码

java - Netty SslHandler 不适用于自己的根证书