netty javadoc解释了setReadable挂起/恢复I / O线程的读操作。我的问题是同时数据发生了什么。 让我们说我在服务器的通道上运行setReadable(false),而另一端的客户端正在向套接字写入数据,数据在哪里?它会填补一些缓冲区吗?有没有办法可以控制这个缓冲区或在溢出时收到任何通知?
暂停或恢复I / O线程的读取操作 异步。此方法是以下代码的快捷方式:
int interestOps = getInterestOps(); if(可读){ setInterestOps(interestOps | OP_READ); } else { setInterestOps(interestOps& ~OP_READ); }
值得一提的是,如果在已经有一些数据要发送的通道上调用setReadable(false),您将获得数据。 因此,如果您在其中一个处理程序中调用channelOpen中的setReadable(false),如果客户端在连接时写入,则仍会在该隧道上获取messageReceived。 as explained on this issue
答案 0 :(得分:1)
它删除了感兴趣的操作,然后从Channel中读取。这意味着操作系统需要缓冲网络堆栈中的所有内容。一旦此缓冲区满了,新数据包就会被丢弃。
如何调整此缓冲区特定于操作系统。在linux上你可以通过/ proc fs。
来完成