# keisoft.chat.server **Repository Path**: keisoft/keisoft.chat.server ## Basic Information - **Project Name**: keisoft.chat.server - **Description**: 通信是管道,业务是大脑: 一种优雅的 .NET 即时通讯系统。ommunication is the pipeline, business is the brain: An elegant .NET instant messaging system. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-08-30 - **Last Updated**: 2026-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: IM, 即时通讯, 聊天应用, 微服务 ## README

KeiChat 一个通信与业务彻底分离的分布式即时通讯系统

「通信是管道,业务时大脑」 —— 分层解耦的分布式架构

ASP.NET Core Microservices MySQL SQLServer Redis MinIO Docker Nginx License: MIT

Keisoft.Chat.Captcha.WebApi Keisoft.Chat.Account.WebApi Keisoft.Chat.Single.WebApi Keisoft.Chat.Group.WebApi Keisoft.Chat.Favorite.WebApi Keisoft.Chat.Moment.WebApi Keisoft.Chat.RiskControl.WebApi Keisoft.Chat.Admin

NeoChat Logo

**简体中文** | [English](README_en.md) --- ## 📖 项目简介   **KeiChat** 是一个历经多年迭代、生产环境验证的通讯系统解决方案。项目始于 2018 年,最初作为企业内部通信工具的核心引擎,支撑了海量消息的可靠传输与复杂的业务场景,并非一蹴而就的架构设计,而是伴随着业务增长与技术演进,经过多次重构沉淀而来的成熟方案。   在架构设计上,本项目严格遵循 “业务领域与实时通信(通信底座)分离” 的原则,将长连接管理、消息路由等基础设施与核心业务领域模型彻底解耦。通信底座是自主研发的高性能即时通讯引擎,专注于解决高并发长连接管理和消息实时路由的硬核问题,对标的是支撑千万级在线的通信底座能力。业务领域层则是基于 .NET9 微服务架构构建的完整社交业务矩阵,覆盖用户关系链、群组社交、内容生态、安全风控等全场景。   这种分层架构让我们能够做到——通信层追求极致的稳定与低延迟,业务层保持敏捷的产品迭代速度,两者通过事件驱动机制松耦合协作,既保障了系统整体的 SLA,又为后续功能扩展预留了充分的架构弹性。基于此原则,整个后端系统被拆分为两个独立的源码仓库: - 📐 **业务领域(本仓库)**:作为系统的**业务层**,由 8 个 .NET9 WebAPI 微服务组成,负责用户、关系链、内容、文件、安全审计等所有复杂业务逻辑与数据持久化,业务层可灵活迭代而不影响长连接稳定性。 - 📡 **通信底座([独立仓库](https://gitee.com/keisoft/keisoft.im))**:作为系统的**接入层**,专注于维持海量 TCP 长连接、心跳保活、消息接收与路由转发,不掺杂任何业务逻辑。 > KeiChat 系统架构图 ![系统架构图](Images/architecture.jpg) --- ## ✨ 微服务概览 - 🔑 **验证码服务**:验证码发送、安全验证、防刷保护。 - 🙍‍♂️ **用户服务**:注册登录、资料编辑、密码重置、状态同步。 - 👨‍👧 **好友关系服务**:搜索、好友请求、同意/拒绝、好友列表管理、好友信息管理、黑名单管理。 - 👨‍👩‍👧 **群组服务**:创建群、邀请/移除成员、群成员禁言、设置管理员、权限控制、发布群公告、群信息编辑。 - ⭐ **个人收藏服务**:收藏消息/图片/链接收藏管理/表情、内容检索。 - 🌈 **朋友圈服务**:动态发布、点赞、评论、时间线聚合。 - 📁 **文件服务**:图片、视频、文档的上传、转码与对象存储分发。 - 🛡️ **风控服务**:处理消息内容、朋友圈内容敏感词拦截与过滤。 --- ## 📈 业务模块的压力测试报告 ![测试报告](Images/test.jpg) --- ## 🖥️ 管理后台功能概览 - 📊 **仪表盘**:实时统计用户总量、在线人数、消息吞吐量。 - 🙍‍♂️ **用户管理**:用户信息查看、账号封禁/解封/注销。 - 👨‍👩‍👧 **群组管理**:查看群组信息、违规群组封禁。 - 🛡️ **风控管理**:敏感词库、拦截日志记录、违规内容回溯与清理。 - ⚙️**系统管理**:客户列表、公证书列表、系统通知、系统管理员。 --- ## 🖼️ 管理后台部分功能截图 ![首页](Images/admin-home.png) ![用户](Images/admin-user.png) ![用户](Images/admin-rc.png) --- ## 🛠️ 技术栈 - **开发框架**:.NET 9 - **架构模式**:微服务(Microservices) - **服务通信**:RESTful API、TCP Socket(通信底座) - **数据存储**:MySQL 或 SQL Server - **缓存**:Redis - **对象存储**: MinIO - **反向代理**:Nginx - **容器化**:Docker、Docker Compose ---- ## 🧪 开发环境要求 - Windows 10/11 - Visual Studio 2022+ --- ## 🚀 一键部署(Docker Compose) #### 1. 快速启动 - 📦 安装 [Docker](https://www.docker.com/) 与 [Docker Compose](https://docs.docker.com/compose/) - 💡 确保默认的`TCP 通讯服务` `18168` 端口未被占用(也可以在 docker-compose.yml 重新指定新的端口)。 - ⚠️ 部署前必改 `docker-compose.yml` 中的以下配置: | 配置项 | 所在服务 | 说明 | | ---------------------------- | ------------------------- | -------------------- | | `EmailOptions__SmtpServer` | keisoft-chat-captcha | 设置邮件服务器地址 | | `EmailOptions__SenderEmail` | keisoft-chat-captcha | 设置发件人邮箱地址 | | `EmailOptions__SenderName` | keisoft-chat-captcha | 设置发件人名称 | | `EmailOptions__SmtpUsername` | keisoft-chat-captcha | 设置邮件服务器用户名 | | `EmailOptions__SmtpPassword` | keisoft-chat-captcha | 设置邮件服务器密码 | | `BrowseUrl` | keisoft-chat-picture-file | 设置图片文件预览地址 | | `BrowseUrl` | keisoft-chat-video-file | 设置视频文件预览地址 | | `BrowseUrl` | keisoft-chat-common-file | 设置通用文件预览地址 | ```bash # 1. 克隆仓库 git clone https://gitee.com/keisoft/keisoft.chat.server.git cd Keisoft.Chat.Server # 2. 一键启动所有服务(后台运行) docker compose up -d ``` #### 2. Nginx 配置 (`nginx.conf`) - 修改 `Gateways/Keisoft.Chat.Gatewa.nginx.conf`、 `Keisoft.Chat.Admin.App/nginx.conf`、`Files/minio-preview-nginx.conf` 等配置文件的域名或证书,然后再添加到 `nginx.conf`中。 ```nginx http { # 通用 API:每秒 200 个请求,突发 400(正常高并发够用) limit_req_zone $binary_remote_addr zone=api_general:20m rate=200r/s; # 并发连接限制:每个 IP 最多 30 个同时连接 limit_conn_zone $binary_remote_addr zone=api_conn:10m; # minio 缓存池 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=minio_cache:100m inactive=24h max_size=10g use_temp_path=off; # minio 下载限流:每个 IP 每秒 10 个请求 limit_req_zone $binary_remote_addr zone=minio_download:10m rate=10r/s; # minio 连接数限制:每个 IP 最多 20 个并发连接 limit_conn_zone $binary_remote_addr zone=minio_conn:10m; server { listen 888; # ... 省略 } # ... 省略 # 加载 KeiChat 所有的配置文件 include /www/wwwroot/Keisoft.Chat/Gateways/Keisoft.Chat.Gatewa.nginx.conf; include /www/wwwroot/Keisoft.Chat/Keisoft.Chat.Admin.App/nginx.conf; include /www/wwwroot/Keisoft.Chat/Files/Minio.Preview.nginx.conf; } ``` #### 3. [部署 Keisoft.IM 方案](https://gitee.com/keisoft/keisoft.im) #### 4. 验证 - 打开浏览器,访问部署完成后管理后台地址:http://xxx.xxx.xxx.xxx:6800 或 `Keisoft.Chat.Admin.App/nginx.conf` 中绑定的域名。 1. 管理员账户:admin 2. 管理员密码:abc123 3. 如果业务网关或通信网关绑定了 SSL/TLS 证书,需要到 `系统管理/公证书列表` 导入公证书。客户端采用**证书锁定 (Certificate Pinning)** 技术,客户端内置服务端公钥指纹并在 TLS 握手阶段进行强一致性校验。此举彻底杜绝了基于用户自定义 CA 证书的 HTTPS 中间人抓包与流量解密,显著提升了通信链路的安全水位。 - 客户端业务网关地址设置为 `Keisoft.Chat/Gateways/Keisoft.Chat.Gatewa.nginx.conf` 绑定的域名。 - 客户端通信网关地址位置为 `Keisoft.IM/Keisoft.IM.Http/nginx.conf` 绑定的域名。([代码仓储](https://gitee.com/keisoft/keisoft.im)) ```c# // Chat Server Address. AppSettings.SetGateway("https://demo-chat.example.com"); // Files Server Address. AppSettings.SetUploadFileGateway("https://demo-chat.example.com/upload-file"); AppSettings.SetUploadVideoGateway("https://demo-chat.example.com/upload-video"); AppSettings.SetUploadPictureGateway("https://demo-chat.example.com/upload-image"); AppSettings.SetUploadAudioGateway("https://demo-chat.example.com/upload-audio"); AppSettings.SetUploadMergeGateway("https://demo-chat.example.com/upload-merge"); // IM Server Address. AppSettings.SetIMServerHost("ims://demo-im.example.com"); ``` --- ## ⚖️使用条款与免责声明 **1.合法使用**:本系统的使用受以下条件限制:您确认并同意仅将本系统用于合法目的,并遵守所有适用的法律法规,包括但不限于您所在司法管辖区、行为发生地及目标影响地的相关法律。您不得利用本系统从事任何侵犯他人合法权益、违反法律规定或危害网络安全的行为。 > 若您违反上述任何条件,本授权立即终止,您必须立即停止使用本系统并删除所有相关副本。因您违反本声明导致的任何法律责任,由您自行承担,本项目维护者保留追究法律责任的权利。 **2.开源性质**:本项目以开源形式提供,供学习、研究与技术交流之用。开发者不对本系统的功能完整性、安全性、稳定性或适用性作任何明示或暗示的保证。 **3.无担保声明**:在法律允许的最大范围内,开发者不对因使用或无法使用本系统所导致的任何直接、间接、附带、特殊或后果性损害承担责任,包括但不限于数据丢失、业务中断或其他商业损害。 **4.风险自担**:您理解并同意:使用本系统所产生的所有风险由您自行承担,包括但不限于系统漏洞、第三方依赖风险及运行环境风险。 **5.知识产权**:本系统及相关代码、文档的知识产权归**原作者所有**。未经书面许可,不得将本系统用于商业目的或擅自篡改、再分发。 --- ## 💬 技术交流群 欢迎加入 KeiChat 技术交流群,一起交流 **.NET、WPF、Avalonia、Xamarin、WebRTC、实时音视频通信、即时通讯架构、多进程设计** 等话题 👇 ![QQ 群](Images/qq.png) - **QQ 群号**:283798566 - **入群方式**:扫码加入或通过 QQ 搜索群号申请加入 - **交流内容**:.NET、C#、实时音视频通信、即时通讯架构、项目 Issue 讨论 > 💡 没有 QQ 的朋友也可以在 GitHub Issues 中留言交流。 --- ## 📄 许可证 MIT License ---

Logo
⭐ 如果 KeiChat 对你学习即时通讯有帮助,欢迎 Star 支持!