网状 - 调用channel.disconnect()实际上关闭了通道(Netty - callin

2019-07-17 18:33发布

我使用了Netty版本2.6.0.Final。

如果我在通道正确认识Netty的文档,要求断开()应该允许我这样称呼连接()稍后重新连接。 然而,当我打电话给我的SimpleChannelHandler子类的断开(),这两个channelDisconnected()和channelClosed()被调用。

我在调试模式下打开此基本上事件的顺序是:

  1. 我对我的频道呼叫断开()
  2. Channels.disconnect()被调用:

     public static ChannelFuture disconnect(Channel channel) { ChannelFuture future = future(channel); channel.getPipeline().sendDownstream(new DownstreamChannelStateEvent( channel, future, ChannelState.CONNECTED, null)); return future; } 
  3. 最终,NioSocketPipelineSink.eventSunk()被调用,以及相关的部分是:

      case CONNECTED: if (value != null) { connect(channel, future, (SocketAddress) value); } else { channel.worker.close(channel, future); } break; 

如此以来值为null和状态连接,通道被关闭(虽然根据这里与空连应注明断开,不一定密切的请求。

所以我失去了一些东西在这里? 什么是断开的点(),如果它只是导致通道被关闭?

这是不是一个巨大的问题,因为如果我需要,我可以只创建一个新的渠道,我的情况,但是从初步检查,这似乎是一个错误的Netty,除非我只是误解,这是如何工作的,或则我]丢一些愚蠢的。

Answer 1:

的Netty之一目的是提出一个统一的频道抽象工作或多或少相同的面向连接的插座(TCP)为减少用于连接的插座(UDP),不管底层实现,OIO,NIO或AIO的。 由于有相当多的分歧,统一的界面将寻找一个特定实现的一些作品有点怪。

断开TCP套接字的行为意味着(从Java API的角度至少)将其关闭。 但是,断开UDP套接字并不意味着关闭它,只是删除本地IP地址/端口和远程IP地址/端口之间的关联。

所以,不,你是不是做做傻事,但我会建议在OPEN / CLOSE事件,而不是采取行动,除非你有在其生命的时间“连接” UDP套接字到不同的远程目标的实际需要。

编辑:错过了一个重要的前述“不”的段落。



文章来源: Netty - calling channel.disconnect() actually closes the channel
标签: netty