0

netty javadoc 解释说 setReadable 暂停/恢复 I/O 线程的读取操作。我的问题是同时数据发生了什么。假设我在服务器的一个通道上运行 setReadable(false),而另一端的客户端正在向套接字写入数据,数据去哪里了?它会填充一些缓冲区吗?有没有办法可以控制这个缓冲区或在它溢出时得到任何通知?

异步挂起或恢复 I/O 线程的读取操作。此方法是以下代码的快捷方式:

int interestOps = getInterestOps(); 如果(可读){ setInterestOps(interestOps | OP_READ);} else { setInterestOps(interestOps & ~OP_READ); }

值得一提的是,如果您在已经有一些数据要调度的通道上调用 setReadable(false),您将获得数据。因此,如果您在其中一个处理程序中的 channelOpen 内调用 setReadable(false),如果客户端在连接时写入,您仍然会在该隧道上收到 messageReceived。 正如在这个问题上所解释的

4

1 回答 1

1

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

调整此缓冲区的方式因操作系统而异。在 linux 上,您可以通过 /proc fs 来完成。

于 2012-04-27T11:31:34.787 回答