• 项目截图

    群聊:

    6k+点赞的SpringBoot+Netty分布式即时通讯系统!爱了爱了!-LMLPHP

    6k+点赞的SpringBoot+Netty分布式即时通讯系统!爱了爱了!-LMLPHP

    私聊:

    6k+点赞的SpringBoot+Netty分布式即时通讯系统!爱了爱了!-LMLPHP

    项目技术栈

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

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

    系统架构

    6k+点赞的SpringBoot+Netty分布式即时通讯系统!爱了爱了!-LMLPHP

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

    代码简单分析

    群聊

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

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

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

    流程肯定是客户端发送一条消息到服务端,服务端收到后在上文介绍的 SessionSocketHolder 中遍历所有 Channel(通道)然后下发消息即可。

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

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

    私聊

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

    在线用户查看

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

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

    后记

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

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

    以下是文章列表:

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

    参考资料


    6k+点赞的SpringBoot+Netty分布式即时通讯系统!爱了爱了!-LMLPHP

    文章有帮助可以点个「在看」或「分享」,都是支持,我都喜欢!

    我是Guide哥,Java后端开发,会一点前端知识,喜欢烹饪,自由的少年。一个三观比主角还正的技术人。我们下期再见!

    本文分享自微信公众号 - JavaGuide(JavaGuide)。
    如有侵权,请联系 support@oschina.cn 删除。
    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    09-08 14:49