{"repo":"alberliu/gim","free":true,"listed":false,"github":"https://github.com/alberliu/gim","clone":"git clone https://github.com/alberliu/gim.git","description":"golang写的IM服务器(服务组件形式)","language":"Go","stars":2705,"topics":["golang","im"],"license":"MIT","category":"deployment-docker-iac","readme_excerpt":"GIM GIM 是一个使用 Go 语言开发的高性能即时通讯服务器，可作为业务系统的 IM 组件快速集成。 特性 - 多协议支持 - 同时支持 TCP 和 WebSocket 接入 - 多设备同步 - 单用户多设备同时在线，消息实时同步 - 离线消息 - 完整的离线消息存储与同步机制 - 多场景支持 - 支持单聊、群聊、房间聊天等多种场景 - 水平扩展 - 支持服务水平扩展，轻松应对高并发 - 容器化部署 - 支持 Docker Compose 和 Kubernetes 部署 - 领域驱动设计 - 代码结构清晰，易于维护和扩展 技术栈 组件 技术 ------ ---- 语言 Go 数据库 MySQL 缓存 Redis 通讯框架 gRPC 传输协议 Protocol Buffers ORM GORM 快速开始 Docker Compose 单机部署 Kubernetes 部署 项目结构 项目结构遵循 golang-standards/project-layout 服务架构 GIM 由三个核心服务组成： 1. Connect 服务 长连接管理服务，负责： - 维持客户端 TCP/WebSocket 长连接 - 心跳检测与连接保活 - TCP 拆包粘包处理 - 消息编解码 2. Logic 服务 业务逻辑服务，负责： - 设备信息管理 - 好友关系管理 - 群组信息管理 - 消息转发与路由 3. Business 服务 业务扩展服务，提供： - 用户注册登录 - 基础鉴权功能 - 可替换为自己的业务服务 如需接入自有业务系统，只需实现 user.int.proto 中的 UserIntService.Auth 接口即可。 客户端接入 接入流程 消息同步机制 每个用户维护一个自增序列号（seq），用于消息同步： 1. 发送消息时 ：获取发送者的 seq 并递增，将消息持久化到发送者的消息列表 2. 离线同步时 ：客户端携带本地最大 seq，服务端返回大于该 seq 的所有消息 Web 客户端 仓库内置一个Web IM 客户端，位于 web/ 目录，基于 Vue 3 + TypeScript + Vite + Naive UI，通过 gRPC-Web 与 WebSocket 与后端通信，使用 IndexedDB 做本地消息持久化。 提醒： web客户端全部使用AI开发，仅用作演示 主要功能 - 手机号 + 验证码登录 - 会话列表、好友列表 - 私聊、群聊 - Markdown 消息，支持粘贴 / 拖拽 / 选择图片上传 - 明 / 暗主题切换 本地启动 更详细的功能说明与协议交互见 web.md 。 API 接口 主要 Proto 文件位于 pkg/protocol/proto/ 目录： 许可证 本项目基于 MIT License 开源。 链接 - GitHub: https://github.com/alberliu/gim","default_branch":null,"files":null,"tree":[],"storefront":"/r/alberliu","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/alberliu/gim/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}