适用于开发者的开源分布式即时通讯系统
大家平时工作中用什么通讯工具进行交流呢?微信?QQ?但是有不少单位为了防止员工摸鱼,不允许员工使用上述工具,但一些能给大家用的本地通讯工具呢又不怎么好用,所以今天TJ君来和大家分享一个适用于开发者的分布式即时通讯系统,cross IM,简称 CIM
CIM总的来说,是一款面向开发者的即时通讯系统,它可以提供一些组件帮助开发者构建成一款属于自己的即时通讯工具。
目前已经实现的功能有:
群聊 私聊 内置命令 聊天记录查询。 一键开启的 AI 模式 使用 Google Protocol Buffer 高效编解码 根据实际情况灵活的水平扩容、缩容 服务端自动剔除离线客户端 客户端自动重连 延时消息
在开发计划中的功能有:
分组群聊 SDK 开发包 离线消息 协议支持消息加密
整体的系统架构如下图所示:
其中,各个组件均采用SpringBoot构建,底层通信采用Netty构建,而存放各个客户端的路由信息、账号信息、在线状态的则是Redis,最后使用了Zookeeper进行IM-server的注册与发现。
其整体功能流程可以这样理解:
首先客户端向route发起登录。登陆成功后,从Zookeeper中选择可用的IM-server返回给客户端,并保存登录、路由信息到Redis。然后由 客户端向IM-server发起长连接请求,连同后保持活跃。最后当客户端下线时通过route清除状态信息。
快速启动四步骤
1、安装 Zookeeper、Redis 并保证网络通畅。
cd cim
mvn -Dmaven.test.skip=true clean package
2、部署 IM-server(cim-server)
cim-server 集群部署同理,只要保证 Zookeeper 地址相同即可。
cp /cim/cim-server/target/cim-server-1.0.0-SNAPSHOT.jar /xx/work/server0/
cd /xx/work/server0/
nohup java -jar /root/work/server0/cim-server-1.0.0-SNAPSHOT.jar --cim.server.port=9000 --app.zk.addr=zk地址 > /root/work/server0/log.file 2>&1 &
3、部署路由服务器(cim-forward-route)
cim-forward-route 本身就是无状态,可以部署多台;使用 Nginx 代理即可。
cp /cim/cim-server/cim-forward-route/target/cim-forward-route-1.0.0-SNAPSHOT.jar /xx/work/route0/
cd /xx/work/route0/
nohup java -jar /root/work/route0/cim-forward-route-1.0.0-SNAPSHOT.jar --app.zk.addr=zk地址 --spring.redis.host=redis地址 --spring.redis.port=6379 > /root/work/route/log.file 2>&1 &
4、启动客户端
启动两个客户端就可以互相通信。
cp /cim/cim-client/target/cim-client-1.0.0-SNAPSHOT.jar /xx/work/route0/
cd /xx/work/route0/
java -jar cim-client-1.0.0-SNAPSHOT.jar --server.port=8084 --cim.user.id=唯一客户端ID --cim.user.userName=用户名 --cim.route.url=http://路由服务器:8083/
客户端有一些常用的内置命令,例如:
:q!
退出客户端
:olu
获取所有在线用户信息
:all
获取所有命令
:q [option]
【:q 关键字】查询聊天记录
:ai
开启 AI 模式
:qai
关闭 AI 模式
:pu
模糊匹配用户
:info
获取客户端信息
:emoji [option]
查询表情包 [option:页码]
:delay [msg] [delayTime]
发送延时消息
让我们一起看下一些实际聊天交流的效果:
如果觉得不错的小伙伴,可以来试试哦!项目地址如下:
点击下方卡片,关注公众号“TJ君”
回复“CIM2022”,获取仓库地址
关注我,每天了解一个牛x、好用、有趣的东东
另外,我们将之前发过的各种项目及工具进行了整理,收录到了GitHub项目,欢迎各位小伙伴光临Star,地址如下:https://github.com/Wechat-TJ/TJ-WORLD-FORU
往期推荐