引擎盖下的Netty setRadable()

时间:2012-04-26 20:00:01

标签: sockets netty

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

1 个答案:

答案 0 :(得分:1)

它删除了感兴趣的操作,然后从Channel中读取。这意味着操作系统需要缓冲网络堆栈中的所有内容。一旦此缓冲区满了,新数据包就会被丢弃。

如何调整此缓冲区特定于操作系统。在linux上你可以通过/ proc fs。

来完成