目录结构:
本文较长,高能预警;带好瓜子板凳。
于是在之前的基础上我完善了一些内容,先来看看这个项目的介绍吧:
CIM(CROSS-IM)
一款面向开发者的 IM(即时通讯)
系统;同时提供了一些组件帮助开发者构建一款属于自己可水平扩展的 IM
。
借助 CIM
你可以实现以下需求:
IM
即时通讯系统。- 适用于
APP
的消息推送中间件。 IOT
海量连接场景中的消息透传中间件。
完整源码托管在 GitHub : https://github.com/crossoverJie/cim
演示
本次主要涉及到 IM 即时通讯,所以特地录了两段视频演示(群聊、私聊)。
点击下方链接可以查看视频版 Demo。
YouTube | Bilibili |
---|---|
群聊 私聊 | 群聊 私聊 |
![]() |
![]() |
也在公网部署了一套演示环境,想要试一试的可以联系我加入内测群获取账号一起尬聊?。
架构设计
下面来看看具体的架构设计。
CIM
中的各个组件均采用SpringBoot
构建。- 采用
Netty + Google Protocol Buffer
构建底层通信。 Redis
存放各个客户端的路由信息、账号信息、在线状态等。Zookeeper
用于IM-server
服务的注册与发现。
整体主要由以下模块组成:
cim-server
IM
服务端;用于接收 client
连接、消息透传、消息推送等功能。
支持集群部署。
cim-forward-route
消息路由服务器;用于处理消息路由、消息转发、用户登录、用户下线以及一些运营工具(获取在线用户数等)。
cim-client
IM
客户端;给用户使用的消息终端,一个命令即可启动并向其他人发起通讯(群聊、私聊);同时内置了一些常用命令方便使用。
流程图
整体的流程也比较简单,流程图如下:
- 客户端向
route
发起登录。 - 登录成功从
Zookeeper
中选择可用IM-server
返回给客户端,并保存登录、路由信息到Redis
。 - 客户端向
IM-server
发起长连接,成功后保持心跳。 - 客户端下线时通过
route
清除状态信息。
所以当我