2015-02-12 261 views
3

下面是一個ChannelHandler回聲服務器。netty如何確定讀取完成時的狀態?

enter image description here

Netty的框架將調用channelReadComplete()方法通知處理程序,以channelRead()的最後一次通話是在當前批次中的最後消息。

我的問題是,由於數據在樹幹上線轉移,怎麼會知道的Netty時a batch of message完成?

回答

3

一旦沒有更多數據要從底層傳輸中讀取,就會觸發channelReadComplete()。在談到SocketChannels這將是以下兩種情況:

  1. 讀(...)返回0
  2. 讀(...)有一個緩衝通過了具有1024個字節來填補,但萊1024被填滿。
+0

謝謝。這些明確的規則比一些高水平的模糊描述要好。 – smwikipedia 2015-02-16 01:51:54

+0

如果讀取了任何數據,我認爲channelReadComplete()也是由[Channel.read()](https://netty.io/4.0/api/io/netty/channel/Channel.html#read())觸發的,即使還有更多的數據需要從底層傳輸中讀取。 @Norman這是正確的嗎?如果是這樣,這種行爲背後的任何原因?謝謝! – Aaron 2016-11-15 04:25:17

+0

是的,這是正確的... channelReadComplete()只是表示在當前的偶數循環運行中不會再有通道讀取。所以你可以例如現在刷新 – 2016-11-15 13:41:40