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)客