-
YAN_IM,一个开源的分布式聊天服务。基于Netty构建的高性能websocket服务器。支持群聊单聊,表情包以及发送图片。 支持消息可靠,消息防重,消息有序。同时基础架构有分布式权限,分布式唯一id,分布式websockt, 分布式事务等常见的分布式技术。
-
分布式webscoket服务重点在netty模块。正在逐步完善聊天所需要的全部功能。比如语音消息,音视频等。对于消息收 发模型以及群聊消息优化也在进行中。
-
目的:将IM使用到的东西抽象出来,方便复用、借鉴。让使用者可以轻松调用
-
模块:包括文件模块、netty模块、用户中心模块、还有其他业务模块。
-
后续:会开发sdk,文档,APIStroe等提供更加简介的调用方式。
-
文档:从图片,架构,技术细节以及视频等方面帮助阅读此项目
- gateway服务 提供统一网关
- file服务 提供文件上传下载
- first服务 提供app基础功能
- netty服务 聊天功能服务,消息推送框架
- vue3 vue重构的前端项目
- common_shiro 分布式权限
- loginUser 用户中心、统一完成授权
通过集群来支持高并发,通过六层报文来实现高可靠。通过幂等来解决消息重复
- 支持单聊和群聊 ,支持发送表情包
- 聊天内容ack机制,然后未送达重试机制(重试三次,三次之后为失败)
- 设计websocket报文,保证消息的可靠性
- 支持分布式,支持gateway负载均衡,将netty服务端注册进入nacos
- 支持websocket授权功能(已经做了相关的截取参数以及改造前端vue)(待改造成异步)
- 接口引用redis设计成幂等 ,lua表达式完成消息幂等
- 会话管理(redis结合本地Map)
- 支持心跳功能,支持客户端断线重连
- 设置消息加密(待完善)
软件架构说明 主要技术点:Spring Boot Spring Cloud Nacos Netty mybatis-plus RocketMQ Docker 前端:Vue3 Websocket Vant
- 先启动nacos
- 启动gateway服务
- 启动node_modules 里面的first服务,启动netty服务
- 启动Vue3项目 npm run serve
- (netty)基于netty,websocket 以及rocketmq的聊天功能
- (first) 关于研战到底模块很多api在这个里面,使用了shardingsphere读写分离
- (common_shiro)权限管理系统改造成一个微服务(jwt+redis实现分布式权限)
- (file)文件模块导入、导出 oss ,上传图片、Excel操作等
- (loginUser) 用户中心模块。统一完成用户授权
- swagger 接口文档地址 localhost:8999/swagger-ui.html
- 完善websocket返回格式,统一报文格式
- 完善心跳机制
- 完善websocket会话
- refrshtoken机制提供前端支持
- 提供redis集群和mq集群
- MDC追踪日志,使用es分析日志。可以使用es
- 完成聊天消息的分表工作;
- 处理redis和mysql的一致性
- 完善群聊遇到的其他常见功能
- jmeter测试 目前来说websocket功能上面可以跑通,但是易用性上面还有很大进步空间, 可以多完善,统一报文风格。
已经涵盖基础的技术选型,以及架构选择,消息可靠,消息防重当方面写了对应文章。业务方面:单聊、群聊、表情包等
-
loginUser 分布式权限 shiro + jwt + redis 【第三期】
-
devops 给为服务添加运维模块 统一管理【第四期】
-
database 微服务数据库模块【第五期】
-
netty netty与mq在项目中的使用【第六期】
-
IM系统客户端消息存储在手机电脑浏览器分别存储在什么地方?对消息加密策略?如何保证服务端消息和客户端消息一致性【第18期】
如果有什么问题留言联系我。qq:1942951600
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request