im - 即时通讯,支持功能:文字 + 音视频 + 文件传输。分布式服务架构,支持海量用户。
1. 功能点
- 用户关系(用户信息,添加好友等逻辑)。
- 单聊。(支持在线聊天,离线推送。)
- 群聊。(支持在线聊天,离线推送。)
- 文件传输。(支持 p2p 在线传输,离线保存于文件服务器。)
- 语音视频。(支持 p2p 在线传输和服务器转发。)
2. 通信协议
- 网络层协议:tcp / udp。
- 应用层协议:http / https。
- 通信数据封包格式:protobuf / json。
协议 | 描述 |
---|---|
tcp | 长链接,用户保活,保证消息实时通信,使用谷歌的 protobuf 封装数据。 |
udp | 无连接协议,保证音视频实时通信。 |
http/https | 短链接,支持不同平台的业务逻辑,使用 json 封装数据。 |
3. 安全性
IM 为保证数据传输安全,可以采用 TLS 加密传输协议。
- 短链接可以使用 https。
- 长链接也可以实现基于 TLS 的 socket 通信。
4. 服务架构
4.1. 服务功能
高性能高可用分布式服务集群。
服务 | 描述 |
---|---|
中心服务 | 类似 zookeeper 管理服务节点。 |
接入服务 | 负责用户的登录认证,用户在线状态管理;或者业务协议请求转发到逻辑服务处理。 |
逻辑服务 | 负责用户关系,单聊,群聊等逻辑关系。 |
转发服务 | 负责在线文件,音视频,p2p 点对点打洞不通的情况下,数据转发。 |
文件服务 | 负责离线文件存储,短视频,短音频的存储,fastdfs 是分布式文件存储系统。 |
推送服务 | 负责离线消息,官方通知消息推送。 |
存储服务 | redis 负责数据高速缓存,mysql 负责聊天等消息数据落地,kafka 负责日志消息和埋点等日志型数据存储消费。 |
4.2. 服务节点关系
4.3. 服务部署
- 软件。
软件 | 版本 |
---|---|
系统 | CentOS Linux release 7.7.1908 (Core), 内核版本:3.10.0-1062.18.1.el7.x86_64 |
nginx | nginx version: nginx/1.16.1 |
redis | redis-6.2.4 |
mysql | mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) |
kafka | Apache Kafka 2.7.0 |
- 硬件。
5. im 详细功能点
- 用户注册登录。
- 注册
- 登录。
- 被强制下线。
- 用户信息
- 查询用户信息。
- 修改用户信息。
- 用户关系。
- 权限。
- 黑名单。
- 屏蔽消息。
- 取消/开启通知。
- 关系。
- 关注。
- 粉丝。
- 好友。
- 权限。
- 聊天。
- 单聊。
- 发送单聊信息。
- 接收单聊信息。
- 发送单聊离线消息。
- 接收单聊离线消息推送。
- 群聊。
- 群组信息。
- 发送群组消息。
- 接收群组消息。
- 发送群组离线消息。
- 接收群组离线消息推送。
- 聊天记录。
- 单聊。
- 群组管理。
- 创建群组。
- 主动退出群组。
- 群组管理员踢人。
- 更新群组信息。
- 解散群组。
- 用户申请入群。
- 管理员审核入群申请。
- 邀请入群。
- 获取群组信息。
- 获取群组成员列表。
- 申请入群管理员审核通知。
- 群成员变更通知。
- 群通知。
- 入群审核结果通知。
- 群信息更改通知。
- 用户被踢出群组通知。
- 搜索。
- 搜索用户。
- 搜索群组。
- 消息推送。
- 官方消息推送。
- 离线消息推送。
- 音视频。
- 单聊群聊。
- 文件。
- 单聊发送文件。(在线文件或离线文件。)
- 群组发送文件。(在线文件或离线文件。)