# echo-im
**Repository Path**: gaoziman/echo-im
## Basic Information
- **Project Name**: echo-im
- **Description**: 一个IM(即时通讯)项目的后端系统。支持IM系统核心功能:好友、私聊、群聊、离线消息、发送语音、图片、文件、emoji表情、回执消息、视频聊天等
严格遵循IM系统的四大原则:实时性、幂等性、不丢失、时序性。
主要基于 Spring Boot 和 Netty 开发
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://gitee.com/brother-one/echo-im
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 40
- **Created**: 2024-08-19
- **Last Updated**: 2024-08-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Echo IM 1.0.0
基于 SpringBoot 和 Netty 开发的即时通讯(IM)系统
## 介绍
**项目简介** :一个仿微信实现的网页版聊天软件。支持好友、私聊、群聊、离线消息、发送语音、图片、文件、emoji表情、回执消息、视
频聊天等功能。严格遵循IM系统的四大原则:实时性、幂等性、不丢失、时序性。
**消息处理流** :用户通过 HTTP 请求将消息发送到 im-platform,平台负责进行权限校验、数据脱敏和异步存储等工作,并为消息添加元
数据,根据这些元数据,im-client 执行相应处理,并将消息发布到 RabbitMQ。消息按照路由规则到达 im-server,最终通过
WebSocket 实时推送给前端用户。
**主要技术栈** :SpringBoot、MyBatis、SpringSecurity、Netty、MySQL、Redis、RabbitMQ、OAuth2.0、WebSocket、Sa-Token、
Redission、Minio
**详细文档** :https://gitee.com/brother-one/echo-im/tree/master/doc/md
## 亮点
1. **调研与选型** :深入调研了多种 IM 系统架构设计和实现方式,明确技术选型,确保项目技术方案的可行性和高扩展性
2. 基于Sa-Token+Redis构建 **认证模块** :实现 **双Token** 授权, **强制下线** ,同终端互斥登录,集成Gitee、Github第三方登录
3. **高可靠的 WebSocket 信道** :实现 连接鉴权、 **心跳检测与续期** 、断线重连机制,并实时上报用户状态,保证信道可靠性和持续性
4. **可靠性** :实现应用层ACK **时间轮** 队列、离线消息的 **双重存储** + **会话级分布式锁** 、MQ **任务补偿** 、可靠信道,保证高可靠
5. **实时性** :通过双级缓存、高效的ACK和离线消息机制、RabbitMQ 异步解耦、Netty NIO 及分布式部署,保证实时性
6. **扩展性** :设计可扩展的底层数据模型, **防止消息扩散风暴** ,确保 **功能内部复用** ,灵活运用设计模式,保障扩展性
7. 去中心化的消息推送架构:基于RabbitMQ构建去中心化消息推送架构,使系统具备集群化部署能力,提高并发处理性能
8. 重构与封装:将消息分发、消息队列(MQ)和仓储功能封装为 Spring Boot **Starter** , **遵循SPI 规范** ,实现低耦合与高扩展性
9. 使用 Nginx 部署项目:实现 反向代理、动静分离,并配置负载均衡和 HTTPS,确保系统的高可用性和安全性
## 系统架构(详见本项目 doc 文件夹)
.png)
## 安装教程
1. 执行 doc 文件夹下的 sql
2. 配置 application.yml
## 参与贡献
1. Fork 本仓库
2. 提交代码到 develop 分支,请在本地解决与 master 分支的冲突
3. 新建 Pull Request