1. 什么是 IM
IM(即时通讯) 是指通过互联网在不同用户之间实现 实时消息传递 的系统或技术。
核心目标:
- 低延迟(消息几乎实时送达)
- 高并发(支撑成千上万甚至上亿用户同时在线)
- 可靠性(消息尽量不丢、不重、不乱序)
常见 IM 产品:微信、QQ、WhatsApp、Telegram、Slack、企业微信、钉钉。
2. IM 的主要功能
一个完整的 IM 系统,一般包括:
- 单聊:点对点消息传输。
- 群聊:多人聊天室。
- 消息同步:多设备(手机/PC/Pad)同步消息。
- 消息漫游:登录新设备可以拉取历史消息。
- 在线状态:是否在线、最后活跃时间。
- 已读回执:显示消息是否已读。
- 推送通知:用户不在线时的消息提醒。
- 多媒体消息:图片、语音、文件、视频。
- 加密安全:端到端加密(E2EE)。
3. IM 的技术架构
一个典型的 IM 系统架构:
- 客户端(App/Web)
- 与服务器建立长连接(一般是 WebSocket / TCP / QUIC)。
- 发送消息、接收消息推送。
- 接入层(网关层)
- 保持长连接,处理心跳、重连。
- 常见技术:Netty(Java)、Actix(Rust)、Go net。
- 消息路由层(核心服务)
- 负责消息转发(用户A → 用户B)。
- 需要处理用户在线/离线逻辑。
- 存储层
- 消息数据库(MySQL、PostgreSQL、MongoDB)
- 缓存/队列(Redis、Kafka) → 异步解耦。
- 离线消息存储(用户不在线时存起来,等上线再推送)。
- 推送服务
- 当用户完全离线时,通过 APNS(iOS)/FCM(安卓) 推送提醒。
4. 协议
IM 的消息传输协议一般有:
- WebSocket:浏览器/APP 常用,双向通信。
- MQTT:轻量高效,适合 IoT 和低带宽场景。
- XMPP:老牌 IM 协议(WhatsApp、早期 Google Talk 用过)。
- 自研协议:许多大厂(微信/QQ)会自研 TCP/UDP 协议,优化性能。
5. 关键难点
- 海量长连接:百万/千万级用户同时在线,需要分布式网关 + 负载均衡。
- 消息可靠性:不能丢消息,QoS(至少一次 / 仅一次)机制。
- 消息顺序:聊天必须按时间顺序显示。
- 离线消息:用户掉线后,消息要缓存并补发。
- 多端同步:同一个账号在多个设备,消息要一致。
- 安全与加密:防止窃听和伪造,常用 TLS + AES/RSA/E2EE。
6. 常见开源 IM 框架
- OpenIM(Go) → 国产开源,功能类似微信/Slack。
- Rocket.Chat(Node.js) → 类似 Slack 的开源 IM。
- Matrix(协议标准 + Synapse 服务器,Python 实现) → 去中心化 IM 协议。
- Ejabberd / Prosody(基于 XMPP) → 稳定但偏老。
7. IM 与 MQTT 的区别
- MQTT → 更适合 物联网、传感器,消息小,QoS 可控。
- IM → 面向 人类用户,需要更多功能(已读回执、群聊、推送、加密、富媒体)。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...

