2012-04-26 74 views
0

netty javadoc解釋了setReadable掛起/恢復I/O線程的讀取操作。我的問題是與此同時數據正在發生什麼。 假設我在服務器的通道上運行setReadable(false),而另一端的客戶端正在將數據寫入套接字,數據在哪裏傳遞?它會填補一些緩衝區?有沒有一種方法可以控制此緩衝區或在溢出時收到任何通知?Netty setRadable()引擎蓋

異步暫停或恢復I/O線程 的讀取操作。此方法是以下代碼的快捷方式:

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

值得一提的是,如果你已經有一些數據來分派你會得到的數據通道上調用setReadable(假)。 因此,如果您在其中一個處理程序中調用channelOpen內的setReadable(false),那麼如果客戶端只是在連接時寫入,您仍然會在該隧道上獲得messageReceived。 as explained on this issue

回答

1

它從當時的頻道中刪除感興趣的閱讀操作。這意味着操作系統將需要緩衝網絡堆棧中的所有內容。一旦這個緩衝區滿了,新的數據包就會被丟棄。

如何調整此緩衝區是特定於操作系統的。在linux上,你可以通過/ proc fs來完成。

+0

是的,我可以看到它與netstat緩衝,如果過了一段時間,我在該通道上設置Readble(true),它應該再次從OS緩衝區中讀取它? – ApriOri 2012-04-27 13:29:03

+0

是的,它正是它所做的 – 2012-04-27 16:14:24