GitHub标星68k,基于SpringBoot+Netty分布式开源的即时通讯系统项目

作者 : 开心源码 本文共1184个字,预计阅读时间需要3分钟 发布时间: 2022-05-13 共241人阅读

最近公司开发需要用到 IM 系统,自己开发的话需要耗费较多时间和精力。于是我们考虑在开源项目的基础上二次开发,我们比照了较多开源方案之后,选择了 CIM[1]

项目简介

CIM(CROSS-IM)项目是面向开发者的 即时通信 系统,项目基于目前比较流行的 SpringBoot 进行构建(项目依赖的Spring Boot 版本为 1.5.x ,可以自行更新到最新稳固版本),基于 Netty 进行网络通信。利用Redis来存放用户端的账户/状态(能否在线)/路由等信息,同时使用Zookeeper来完成服务间的发现。

通过 CIM(CROSS-IM) 你可以设计一款属于自己可水平扩展的 IM 。

项目地址: crossoverJie/cim[2]

功能清单

  • 群聊
  • 私聊
  • 聊天记录查询
  • AI 自动聊天(价值两亿的智能模式哦)
  • 延时消息
  • 用户端自动重连
  • 服务端自动剔除离线用户端
  • 支持水平扩容/缩容
  • 支持Protocol Buffer协议

项目截图

群聊:

imageimage

私聊:

image

项目技术栈

  • Spring Boot
  • Zookeeper
  • Netty
  • Redis

可以看到项目中用到的都是技术都是很常用技术,同时也是我们需要掌握的能力。而且crossoverJie 大佬的代码写的也相当漂亮,非常值得学习一波。

先来简单看一下系统整体架构!

系统架构

image

下面我们来一起看下几个关键实现吧。

代码简单分析

群聊

群聊的使用非常简单,只要要在控制台输入消息回车就可。

这时会去调用 route 的群聊接口。

image

实现的效果就是其中一个用户端发消息,其他所有用户端都能收到!

流程一定是用户端发送一条消息到服务端,服务端收到后在上文详情的 SessionSocketHolder 中遍历所有 Channel(通道)而后下发消息就可。

服务端是单机倒也可以,但现在是集群设计。所以所有的用户端会根据之前的轮询算法分配到不同的 服务端实例中。

imageimage

接着会挨个调用每个用户端所在的服务端的 HTTP 接口用于推送消息。

imageimage

私聊

私聊也是同理,但前提是需要触发关键字;使用 userId;;消息内容 这样的格式才会给某个客户发送消息,所以一般都需要先使用 :olu 命令获取所以在线客户才方便使用。

image

在线客户查看

这是一个辅助接口,可以查询出当前在线客户信息。

imageimage

实现也很简单,也就是查询之前保存 ”客户登录状态的那个去重 set “就可。

后记

CIM[3] 的功能包含但不限于此,其余功能就等你自己去体验喽~

体贴的crossoverJie 大佬还为该项目写了很多 相关的文章[4],分享了少量他开发这个项目的设计流程/遇到的问题,包含了很多大佬的思考。小伙伴们可要好好利用起来哦~

以下是文章列表:

image

按照 crossoverjie 大佬的设想,该项目还有很多 todo list,感兴趣的小伙伴在学习之余也可以贡献自己的一份力量,积极的参加开源哈!

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » GitHub标星68k,基于SpringBoot+Netty分布式开源的即时通讯系统项目

发表回复