Tcp 什么是棘手的通道状态转换?

Tcp 什么是棘手的通道状态转换?,tcp,udp,netty,datagram,socketchannel,Tcp,Udp,Netty,Datagram,Socketchannel,Netty频道有多个状态,但我找不到任何状态 关于实际状态转换的文档。最接近任何 我可以在Netty 3.2.x系统中找到关于这方面的文档 我能够找到通道可能处于的状态 但是,没有任何东西可以描述 通道可以从一个状态切换到另一个状态。看来并非所有 通道实现所有可能的状态转换。不同的Netty通道确实具有不同的状态转换 通常,基于TCP的服务器可能的状态转换 渠道包括: OPEN -> ( BOUND -> UNBOUND )* -> CLOSE 如果您正在管道中使用Sim

Netty频道有多个状态,但我找不到任何状态 关于实际状态转换的文档。最接近任何 我可以在Netty 3.2.x系统中找到关于这方面的文档

我能够找到通道可能处于的状态

但是,没有任何东西可以描述 通道可以从一个状态切换到另一个状态。看来并非所有
通道实现所有可能的状态转换。

不同的Netty通道确实具有不同的状态转换

通常,基于TCP的服务器可能的状态转换 渠道包括:

OPEN -> ( BOUND -> UNBOUND )* -> CLOSE
如果您正在管道中使用SimpleChannelHandler子类 当以下情况之一发生时,处理上游事件的等效方法 发生的这些状态更改是:

channelOpen
channelBound
channelUnbound
channelClose
服务器通道永远不会进入连接状态

服务器通道一旦恢复,很少会返回到绑定状态 移动到未绑定状态,但这似乎是相关的 关于应用程序,请参阅

请注意,服务器通道可以在打开子通道时触发事件 打开或关闭。这些事件只能在服务器启动后发生 通道处于绑定状态。当发送这些事件时 上游代表服务器通道,然后在 您的SimpleChannelHandler子类被称为:

childChannelOpen
childChannelClosed
基于TCP的子通道和客户端通道的可能状态转换 它们是:

首先进入已连接的状态似乎是不正确的 在频道代码内强制执行;然而,这种状态总是存在的 Netty中的子通道和客户端通道都首先触发 将通道移动到连接状态之前的框架

如果您在中使用的是SimpleChannelHandler或其子类 您的管道等效方法包括:

channelOpen
channelBound
channelConnected
channelDisconnected
channelUnbound
channelClose
基于TCP的通道在执行任何操作之前必须处于连接状态 可以读取或写入通道。这包括服务器通道, 它永远不会被读或写,这不是一个很大的问题 令人惊讶的是,服务器通道总是只用于管理 代表服务器执行连接操作

数据报套接字与基于TCP的套接字在以下方面的操作不同 它们可以用来读取和写入数据,而不需要实际操作 已连接(尽管连接数据报套接字的速度可能会更快 避免安全检查)。可以有效地使用数据报套接字 使用列出的基于TCP的子级和
上面描述的服务器通道。

很好的评论,谢谢,它是基于一些tcp文章还是仅仅阅读netty源?还有一个问题:如果我需要计算客户端对远程对等方的活动连接计数,那么在
channelConnected
中增加和在
channelDisconnected
中减少是否足够?如果
保持活动状态
连接和其他功能,计数器是否准确?谢谢我阅读了消息来源以了解详情。我想我可以省去别人的麻烦,以防他们有类似的问题。WRT active connection count,在
channelConnected
中增加计数器,在
channelDisconnected
中减少计数器就足够了。HTTP keep alive和TCP结构上的类似协议对Netty没有影响,除非应用程序间接控制套接字连接。
channelOpen
channelBound
channelConnected
channelDisconnected
channelUnbound
channelClose