我正在使用Netty版本2.6.0.Final。Netty - 調用channel.disconnect()實際上關閉了頻道
如果我正確理解Netty文檔,在Channel上調用disconnect()應該允許我調用connect()以後再次連接。但是,當我調用disconnect()時,我的SimpleChannelHandler子類的channelDisconnected()和channelClosed()被調用。
我在調試模式下打開此基本上事件的順序是:
- 我對我的頻道
Channels.disconnect()被調用呼叫斷():
public static ChannelFuture disconnect(Channel channel) { ChannelFuture future = future(channel); channel.getPipeline().sendDownstream(new DownstreamChannelStateEvent( channel, future, ChannelState.CONNECTED, null)); return future; }
最終調用NioSocketPipelineSink.eventSunk(),相關部分爲:
case CONNECTED: if (value != null) { connect(channel, future, (SocketAddress) value); } else { channel.worker.close(channel, future); } break;
如此以來值爲空,並且狀態被連接時,信道被關閉(根據here具有空CONNECTED儘管應說明斷開,不一定接近的請求。
所以我在這裏錯過了什麼?如果斷開連接()會導致通道關閉,那麼它有什麼意義?
這不是一個大問題,因爲如果我需要我可以爲我的情況創建一個新的通道,但從初始檢查來看,這看起來像是一個Netty錯誤,除非我只是誤解了這應該如何工作或我在做一些愚蠢的事情。
嗯,我想這是有道理的。我主要只是想找到一種方法,可以在斷開連接後重用Netty TCP通道,而不必完全重新創建整個Channel和管道(並更新引用它的對象),但它可能不夠昂貴而無法成爲問題。 –
TCP連接幾乎總是代表更高層次上的「緊密」連接;對於大多數情況下,嘗試重新使用較低級別資源的工作量會更大,工作量會更大,而當高級連接結束時會丟棄這些資源。 –