《即时消息技术剖析与实战》学习笔记8——IM系统如何保证长连接的可用性

本文介绍了即时消息(IM)系统中,为了确保长连接的可用性,采用心跳机制的重要性。心跳机制能够及时发现并处理网络中断,减少服务端资源浪费,支持客户端断线重连,并防止运营商因无数据交换而切断连接。心跳检测方式包括TCP Keepalive、应用层心跳和智能心跳,每种都有其优缺点。通过心跳机制,IM系统能保持连接的高可用状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设有以下突发意外情况:

  • 用户进入信号不好的地方,手机没有网络信号了
  • 上网的路由器突然掉线了
    这个时候,比如微信发消息,消息就会转圈圈,甚至变成红色叹号……
    上面情况都会导致“长连接”不可用。

我们知道,为了让消息能更加实时、可靠、快速地触达到接收方,大部分 IM 系统会通过“长连接”的方式来建立收发双方的通信通道,长连接一旦建立,就一直存在,除非网络被中断。

有了这基于 TCP 长连接的通信协议,在用户上线连接时,可以在服务端维护好连接到服务器的用户设备和具体 TCP 连接的映射关系,服务端也能通过这个映射关系随时找到对应在线的用户的客户端。对于发送方来说,发送消息也能通过“长连接”通道把消息给到 IM 服务端。

一、什么是心跳机制

但长连接并不是永久可用的,当长连接在中间链路出问题时,为了不使用户感知到,应快速通知连接的两端,并重新建立新的可用连接,从而使长连接一直保持“高可用”状态,这个能够快速、不间断识别连接可用性的机制,称为“心跳机制”。

“心跳机制”会持续地往连接发送“模拟数据”,一方面是为了试探连接的可用性,另一方面也是为了保证数据的持续流通,让连接在没有真正业务数据收发的情况下,不会被中间的网络运营商以为连接没有被使用而切断连接。

二、心跳机制的优点
1. 降低服务端开销

消息之所以能够实现“服务端推送”,是因为针对每一台上线的设备,都会在 IM 服务端维护相应的 用户设备<->网络连接 这样的映射关系,除此之外,为了节省网络开销,还会在服务端临时缓存一些不用每次请求都携带的客户端信息,如 app 版本号、操作系统、网络状态等,甚至还会在服务端维护一些“用户在线状态”和“所有在线设备”这些信息,便于业务使用,这样客户端一旦建好长连接,只需要首次携带这些信息,后续请求可以不用再携带,而是使用 IM 服务端缓存的这些信息。

若没有心跳机制,当长连接异常而 IM 服务端无法感知到,会产生两种不良后果:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值