回答
Netty 保持长连接有两种方式。
- 心跳机制
心跳机制可以用于定期检测连接的可用性,防止连接由于长时间无数据传输而被网络设备(如路由器)关闭。Netty 提供了 IdleStateHandler
,它可以检测连接是否出现读空闲、写空闲或读写空闲,如若出现空闲,则 IdleStateHandler
** **会产生一个 IdleStateEvent
事件,我们可以利用这个事件来执行相应的心跳逻辑(如发送心跳数据),以维持连接的活跃状态,保持长连接。
关于 Netty 心跳机制,请阅读这两篇文章:
- 利用参数
SO_KEEPALIVE
TCP 协议实际上自带就有长连接选项,它本身也是心跳包机制。在 TCP 协议中,一旦客户端和服务端建立了连接,除非一方主动关闭或网络异常,这个连接就会一直保持开启状态。Netty 可以利用 TCP 协议的这个特性来实现应用层的长连接。