# yan **Repository Path**: xiaoke0624/yan ## Basic Information - **Project Name**: yan - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-07 - **Last Updated**: 2024-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # yanzhandaodi_back #### 介绍 - YAN_IM,一个开源的分布式聊天服务。基于Netty构建的高性能websocket服务器。支持群聊单聊,表情包以及发送图片。 支持消息可靠,消息防重,消息有序。同时基础架构有分布式权限,分布式唯一id,分布式websockt, 分布式事务等常见的分布式技术。 - 分布式webscoket服务重点在netty模块。正在逐步完善聊天所需要的全部功能。比如语音消息,音视频等。对于消息收 发模型以及群聊消息优化也在进行中。 - 目的:将IM使用到的东西抽象出来,方便复用、借鉴。让使用者可以轻松调用 - 模块:包括文件模块、netty模块、用户中心模块、还有其他业务模块。 - 后续:会开发sdk,文档,APIStroe等提供更加简介的调用方式。 - 文档:从图片,架构,技术细节以及视频等方面帮助阅读此项目 ### #### 服务说明 1. gateway服务 提供统一网关 2. file服务 提供文件上传下载 3. first服务 提供app基础功能 4. netty服务 聊天功能服务,消息推送框架 5. vue3 vue重构的前端项目 6. common_shiro 分布式权限 7. loginUser 用户中心、统一完成授权 ### netty 模块实现功能重点说明 通过集群来支持高并发,通过六层报文来实现高可靠。通过幂等来解决消息重复 1. 支持单聊和群聊 ,支持发送表情包 2. 聊天内容ack机制,然后未送达重试机制(重试三次,三次之后为失败) 3. 设计websocket报文,保证消息的可靠性 4. 支持分布式,支持gateway负载均衡,将netty服务端注册进入nacos 5. 支持websocket授权功能(已经做了相关的截取参数以及改造前端vue)(待改造成异步) 6. 接口引用redis设计成幂等 ,lua表达式完成消息幂等 7. 会话管理(redis结合本地Map) 8. 支持心跳功能,支持客户端断线重连 9. 设置消息加密(待完善) #### 软件架构 软件架构说明 主要技术点:Spring Boot Spring Cloud Nacos Netty mybatis-plus RocketMQ Docker 前端:Vue3 Websocket Vant #### 启动说明 1. 先启动nacos 2. 启动gateway服务 3. 启动node_modules 里面的first服务,启动netty服务 4. 启动Vue3项目 npm run serve ### 模块功能: 1. (netty)基于netty,websocket 以及rocketmq的聊天功能 2. (first) 关于研战到底模块很多api在这个里面,使用了shardingsphere读写分离 3. (common_shiro)权限管理系统改造成一个微服务(jwt+redis实现分布式权限) 4. (file)文件模块导入、导出 oss ,上传图片、Excel操作等 5. (loginUser) 用户中心模块。统一完成用户授权 ### 补充: 1. swagger 接口文档地址 localhost:8999/swagger-ui.html ### 短期TODO 1. 完善websocket返回格式,统一报文格式 2. 完善心跳机制 3. 完善websocket会话 4. refrshtoken机制提供前端支持 5. 提供redis集群和mq集群 6. MDC追踪日志,使用es分析日志。可以使用es 7. 完成聊天消息的分表工作; 8. 处理redis和mysql的一致性 9. 完善群聊遇到的其他常见功能 10. jmeter测试 目前来说websocket功能上面可以跑通,但是易用性上面还有很大进步空间, 可以多完善,统一报文风格。 ### 与本项目相关技术的博文 已经涵盖基础的技术选型,以及架构选择,消息可靠,消息防重当方面写了对应文章。业务方面:单聊、群聊、表情包等 1. [sprinboot单体项目升级成springcloud项目【第一期】](https://blog.csdn.net/qq_21561833/article/details/127348148) 2. [前端项目技术选型以及页面展示【第二期】](https://blog.csdn.net/qq_21561833/article/details/131676184) 3. loginUser [分布式权限 shiro + jwt + redis 【第三期】](https://blog.csdn.net/qq_21561833/article/details/127605241) 4. devops [给为服务添加运维模块 统一管理【第四期】](https://blog.csdn.net/qq_21561833/article/details/127821543) 5. database [微服务数据库模块【第五期】](https://blog.csdn.net/qq_21561833/article/details/131315983) 6. netty [netty与mq在项目中的使用【第六期】](https://blog.csdn.net/qq_21561833/article/details/131317748) 7. [分布式websocket即时通信(IM)系统构建指南【第七期】](https://blog.csdn.net/qq_21561833/article/details/135658862) 8. [分布式websocket即时通信(IM)系统保证消息可靠性【第八期】](https://blog.csdn.net/qq_21561833/article/details/135681086) 9. [分布式websocket IM聊天系统相关问题问答【第九期】](https://blog.csdn.net/qq_21561833/article/details/135734395) 10. [什么?websocket也有权限!这个应该怎么做?【第十期】](https://blog.csdn.net/qq_21561833/article/details/135758402) 11. [分布式ID是什么,以美团Leaf为例改造融入自己项目【第十一期】](https://blog.csdn.net/qq_21561833/article/details/135852852) 12. [IM聊天系统为什么需要做消息幂等?如何使用Redis以及Lua脚本做消息幂等【第12期】](https://blog.csdn.net/qq_21561833/article/details/136104296) 13. [微信发送一条消息经历哪些过程。企业微信以及钉钉的IM架构对比【第13期】](https://blog.csdn.net/qq_21561833/article/details/136102083) 14. [微信群为什么上限是500人,IM设计系统中的群聊的设计难点【第14期】](https://blog.csdn.net/qq_21561833/article/details/136264878) 15. [【分布式websocket】RocketMQ发送消息保证消息最终一致性需要做哪些处理?【第15期】](https://blog.csdn.net/qq_21561833/article/details/136389095) 16. [【分布式websocket】群聊中的各种难点以及解决推拉结合【第16期】](https://blog.csdn.net/qq_21561833/article/details/136445874) 17. [【分布式webscoket】未读消息如何设计?解决缓存与数据库数据一致性!推送未读消息流程【第17期】](https://blog.csdn.net/qq_21561833/article/details/136447741) 18. [IM系统客户端消息存储在手机电脑浏览器分别存储在什么地方?对消息加密策略?如何保证服务端消息和客户端消息一致性【第18期】](https://blog.csdn.net/qq_21561833/article/details/136535333) 如果有什么问题留言联系我。qq:1942951600 ### 演示图第二版
### 演示图第一版
#### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request