1、引言
老读者应该还记得我在去年国庆节前分享过一篇《技术干货:从零开始,教你设计一个百万级的消息推送系统》,虽然我在文中有贴一些伪代码,依然有些朋友希望能直接分享一些可以运行的源码。好吧,质疑我穷我无话可说(因为是真穷。。),怀疑我撸码的能力那是绝对不行,所以这次准备拉起键盘大干一场——徒手撸套分布式IM出来!^_^!
本文记录了我开发的一款面向IM学习者的 IM系统——CIM(全称:CROSS-IM),同时提供了一些组件帮助开发者构建一款属于自己可水平扩展的 IM。
通过学习本文和CIM代码,你可以获得以下知识:
1)如何从头开发一套IM(CIM的客户有点弱,见谅见谅);
2)如何设计分布式的IM架构;
3)如何将你的分布式IM架构用代码和相关技术实现出来。
本文配套的CIM源码地址:
* 友情提示:阅读本文和CIM源码,需要您具备一定的网络编程、IM理论等知识等,如果您还不具备这些,请先阅读《新手入门一篇就够:从零开发移动端IM》,完全来的及!
文章同步发布于:http://www.52im.net/thread-2775-1-1.html
2、关于作者

crossoverJie(陈杰): 90后,毕业于重庆信息工程学院,现供职于重庆猪八戒网络有限公司。
3、运行演示
本次特地录了两段视频演示(群聊、私聊),点击下方链接可以查看视频版 Demo。
CIM 私聊视频演示:https://www.bilibili.com/video/av39405821
CIM 群聊视频演示:https://www.bilibili.com/video/av39405501
4、架构设计
下面来看看具体的架构设计:

架构说明:
1)CIM 中的各个组件均采用 SpringBoot 构建;
2)采用 Netty + Google Protocol Buffer 构建底层通信;
3)Redis 存放各个客户端的路由信息、账号信息、在线状态等;
4)Zookeeper 用于 IM-server 服务的注册与发现。
整体主要由以下模块组成:
1)cim-server——IM 服务端:用于接收 client 连接、消息透传、消息推送等功能。支持集群部署;
2)cim-forward-route——消息路由服务器:用于处理消息路由、消息转发、用户登录、用户下线以及一些运营工具(获取在线用户数等);
3)cim-client——IM 客户端:给用户使用的消息终端,一个命令即可启动并向其他人发起通讯(群聊、私聊);同时内置了一些常用命令方便使用。
5、逻辑流程图
整体的流程也比较简单,流程图如下:

流程解释如下:
1)客户端向 route 发起登录;
2)登录成功从 Zookeeper 中选择可用 IM-server 返回给客户端,并保存登录、路由信息到 Redis;
3)客户端向 IM-server 发起长连接,成功后保持心跳;
4)客户端下线时通过 route 清除状态信息。
所以当我们自己部署时需要以下步骤:
1)搭建基础中间件

本文记录了一位开发者从头开发的分布式IM系统CIM,旨在帮助学习者了解如何设计和实现IM系统。CIM采用SpringBoot、Netty和Google Protocol Buffer构建,使用Redis和Zookeeper进行数据存储和服务发现。文章提供了CIM的源码地址,通过学习和实践,读者可以掌握IM开发、分布式架构设计和相关技术实现。
最低0.47元/天 解锁文章
6694





