Netty 当设置AUTO_READ=false时,网络丢失了一些数据

Netty 当设置AUTO_READ=false时,网络丢失了一些数据,netty,Netty,我试图通过手动调用channel.read()来实现背压。但客户似乎会丢失一些数据 示例: 服务器每1s发送一个增量整数,并打印该整数。 客户端每5秒从套接字读取一次,然后将整数写入控制台日志 结果 服务器端: Mon Nov 25 00:22:48 CST 2019 write to socket: 1 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361] write to socket successfully

我试图通过手动调用channel.read()来实现背压。但客户似乎会丢失一些数据

示例
服务器每1s发送一个增量整数,并打印该整数。
客户端每5秒从套接字读取一次,然后将整数写入控制台日志

结果
服务器端:

Mon Nov 25 00:22:48 CST 2019 write to socket: 1 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 1
Mon Nov 25 00:22:49 CST 2019 write to socket: 2 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 2
Mon Nov 25 00:22:50 CST 2019 write to socket: 3 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 3
Mon Nov 25 00:22:51 CST 2019 write to socket: 4 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 4
Mon Nov 25 00:22:52 CST 2019 write to socket: 5 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 5
Mon Nov 25 00:22:53 CST 2019 write to socket: 6 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 6
Mon Nov 25 00:22:55 CST 2019 write to socket: 7 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 7
Mon Nov 25 00:22:56 CST 2019 write to socket: 8 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 8
Mon Nov 25 00:22:57 CST 2019 write to socket: 9 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 9
Mon Nov 25 00:22:58 CST 2019 write to socket: 10 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 10
Mon Nov 25 00:22:59 CST 2019 write to socket: 11 channel : [id: 0x2aba8985, L:/127.0.0.1:8081 - R:/127.0.0.1:65361]
write to socket successfully 11
客户端:

Mon Nov 25 00:22:47 CST 2019 received signal: 0
Mon Nov 25 00:22:52 CST 2019 received signal: 1
Mon Nov 25 00:22:57 CST 2019 received signal: 5
Mon Nov 25 00:23:02 CST 2019 received signal: 10
Mon Nov 25 00:23:07 CST 2019 received signal: 15
Mon Nov 25 00:23:12 CST 2019 received signal: 20
问题
套接字读取缓冲区在客户端没有超过,但它错过了数字2/3/4/6/7/8/9/

这些号码到哪里去了

您可以使用测试用例轻松地重播该用例:
服务器
代码:

客户端
code:

@ninja-知道这里到底发生了什么

根本原因是我没有在channelRead中耗尽缓冲区,而是读取了头四个字节

通过添加以下代码,此问题已得到修复

int readableBytesSize=buf.readableBytes();
而(ReadableByTesseSize/4>0){
int信号=buf.readInt();
System.out.println(新日期()
+“接收到的信号:”
+信号);
ReadableByTesseSize-=4;
}
github问题: