【发布时间】:2020-04-10 11:10:50
【问题描述】:
根据文档https://netty.io/3.6/api/org/jboss/netty/channel/ChannelEvent.html,有 2 个上游事件会改变 OPEN 通道的状态:
channelOpen(状态 = OPEN,值 = true)
channelClosed(状态 = OPEN,值 = false)
还有一个下游事件:
关闭(状态=打开,值=假)
但是,我找不到有关上游 channelOpen 和 channelClosed 事件之间是否存在保证的一对一关系的任何文档。 IE。是否保证如果 channelOpen 事件被触发,那么 channelClosed 事件也将被触发一次,无论哪一方(客户端或服务器)以及如何(优雅地或不优雅地)关闭套接字?
我想要实现的是一种机制来限制我的应用程序中开放通道的数量。为了实现这一点,我打算在每个通道管道中添加一个 SimpleChannelHandler 的共享实例,并在以下位置增加/减少计数器:
channelClosed 和 channelOpen 方法:
https://netty.io/3.6/api/org/jboss/netty/channel/SimpleChannelHandler.html#channelOpen(org.jboss.netty.channel.ChannelHandlerContext,%20org.jboss.netty.channel.ChannelStateEvent) https://netty.io/3.6/api/org/jboss/netty/channel/SimpleChannelHandler.html#channelClosed(org.jboss.netty.channel.ChannelHandlerContext,%20org.jboss.netty.channel.ChannelStateEvent)
实现这种机制是正确的方法吗?或者可能存在未生成上游 channelClosed 事件而还应检查下游事件的情况?
谢谢!
【问题讨论】: