正确理解IM长连接的心跳及重连机制,并动手实现(有完整IM源码)

本文详细介绍了IM长连接中心跳及重连机制的实现,包括TCP协议的保活机制、应用层心跳的两种方式、客户端自动重连的策略,以及服务端剔除离线客户端的逻辑。作者分享了在CIM系统中踩坑与填坑的过程,提供了一套完整的IM源码供读者参考。同时,文中指出了对Netty的IdleStateHandler的常见误解,并给出了正确的重连实现方案。
摘要由CSDN通过智能技术生成

1、引言

说道“心跳”这个词大家都不陌生,当然不是指男女之间的心跳,而是和长连接相关的。顾名思义就是证明是否还活着的依据。

什么场景下需要心跳呢?目前我们接触到的大多是一些基于长连接的应用需要心跳来“保活”。

由于在长连接的场景下,客户端和服务端并不是一直处于通信状态,如果双方长期没有沟通则双方都不清楚对方目前的状态,所以需要发送一段很小的报文告诉对方“我还活着”。

同时还有另外几个目的:

1)服务端检测到某个客户端迟迟没有心跳过来可以主动关闭通道,让它下线;

2)客户端检测到某个服务端迟迟没有响应心跳也能重连获取一个新的连接。

本文正好借着在CIM系统中有这样两个需求(CIM是本文作者从零开发的一个学习性质的IM系统,详见《拿起键盘就是干:跟我一起徒手开发一套分布式IM系统》),正好来聊一聊我是如何理解IM长连接的心跳及重连机制,以及又是怎么踩坑已及填坑的。

本文配套的CIM源码地址:

主要镜像:https://github.com/crossoverJie/cim

备用镜像:https://github.com/52im/cim

阅读本文需要一定的网络编程以及Netty方面的知识。

有关网络编程基础知识,请阅读以下资料:

TCP/IP详解 - 第11章·UDP:用户数据报协议

TCP/IP详解 - 第17章·TCP:传输控制协议

TCP/IP详解 - 第18章·TCP连接的建立与终止

TCP/IP详解 - 第21章·TCP的超时与重传

通俗易懂-深入理解TCP协议(上):理论基础》(推荐)

网络编程懒人入门(一):快速理解网络通信协议(上篇)

网络编程懒人入门(二):快速理解网络通信协议(下篇)

2、关于作者

crossoverJie(陈杰): 90后,毕业于重庆信息工程学院,现供职于重庆猪八戒网络有限公司。

作者的博客:https://crossoverjie.top

作者的Github:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值