时隔五年 9K star 的 IM 项目发布 v2.0.0 了

开发 项目管理
route 由于是无状态,可以任意扩展,server 通过注册中心也支持集群部署,当发生宕机或者是扩容时,客户端会通过心跳和重连机制保证可用性。


介绍

上次发版还是在五年前了:图片

因为确实已经很久没有更新了,在开始之前还是先介绍 cim 是什么。

这里有一张简单的使用图片:

图片图片

同时以前也有录过相关的视频:

通过 cim 这个名字和视频可以看出,它具备 IM 即时通讯的基本功能,同时基于它可以实现:

  • 即时通讯
  • 消息推送
  • IOT 消息平台

现在要在本地运行简单许多了,前提是有 docker 就可以了。

docker run --rm --name zookeeper -d -p 2181:2181 zookeeper:3.9.2
docker run --rm --name redis -d -p 6379:6379 redis:7.4.0

git clone https://github.com/crossoverJie/cim.git
cd cim
mvn clean package -DskipTests=true
cd cim-server && cim-client && cim-forward-route
mvn clean package spring-boot:repackage -DskipTests=true

架构

cim 的架构图如下:

图片图片

主要分为三个部分:

  • Client 基本交互功能

消息收发

消息查询

延迟消息

  • Route 提供了消息路由以及相关的管理功能
  • API 转发

  • 消息推送

  • 会话管理

  • 可观测性

  • Server 主要就提供长链接能力,以及真正的消息推送

同时还有元数据中心(支持扩展实现)、消息存储等组件;

不管是客户端、route、server 都是支持集群:

  • route 由于是无状态,可以任意扩展
  • server 通过注册中心也支持集群部署,当发生宕机或者是扩容时,客户端会通过心跳和重连机制保证可用性。

所以整个架构不存在单点,同时比较简单清晰的,大部分组件都支持可扩展。

流程

图片图片

为了更方便理解,花了一个流程图。

  • server 在启动之后会先在元数据中心注册
  • 同时 route 会订阅元数据中的 server 信息
  • 客户端登陆时会调用 route 获取一个 server 的节点信息
  • 然后发起登陆请求。

成功之后会保持长链接。

  • 客户端向发送消息时会调用 route 接口来发起消息
  • route 根据长链接关系选择 server 进行消息推送

v2.0.0

接下来介绍下本次 v2.0.0 有哪些重大变更,毕竟是修改了大的版本号。

这里列举一些重大的改动:

图片图片

  • 首先是支持了元数据中心,解耦了 zookeeper,也支持自定义实现。
  • 支持了集成测试,可以保证提交的 PR 对现有功能的影响降到最低,代码质量有一定保证;review 代码时更加放心。
  • 单独抽离了 client-sdk,代码耦合性更好且更易维护。
  • 服务之间调用的 RPC 完成了重构

支持了动态 URL

泛型数据解析

  • 还有社区小伙伴贡献的一些 bug 修复、RpcProxyManager 的 IOC 支持等特性。

总结

更多的部署和使用可以参考项目首页的 README,有详细的介绍。

cim 目前还需要优化的地方非常多;接下来的重点是实现 ACK,同时会完善一下通讯协议。

图片图片

todo 列表我也添加了很多,所以非常推荐感兴趣的朋友可以先看看 todo 列表,说不定就有你感兴趣的可以参与一下。

责任编辑:武晓燕 来源: crossoverJie
相关推荐

2024-04-16 07:10:46

大模型AI自动生成视频

2024-05-11 09:09:30

Quill 2.0编辑格式化

2011-12-02 14:55:39

Java工具

2022-02-16 09:55:39

Elastic 8开源索引

2023-12-10 14:28:58

VS Code软件开发代码编辑器

2023-12-21 14:53:00

AI模型

2009-08-27 09:45:42

Apache Came

2024-05-22 15:29:32

2021-10-25 23:12:06

iOS应用系统

2021-03-04 20:38:49

Open RAN网络通信

2021-09-09 07:21:25

项目GithubRedux-Thunk

2020-10-28 09:50:05

GitHubPython项目

2022-07-11 09:59:19

GitHub开源

2020-08-14 11:05:35

Wi-Fi5G手机

2013-02-25 10:48:53

RubyWeb

2021-03-30 10:02:51

前端开发技术

2013-12-24 11:01:13

Facebook开源项目

2020-05-08 15:29:15

编程语言PythonJava

2020-07-06 08:06:00

Java模块系统

2019-08-06 13:29:48

GitHub代码机器学习
点赞
收藏

51CTO技术栈公众号