工作之余断断续续开发了一年时间欢迎starsgo-hichat-apiEnglish | 简体中文go-hichat-api 是Go语言后端与 Web 客户端仓库是一个基于 go-zero 的微服务即时通讯与社交平台。项目整合 REST API、zRPC 服务、WebSocket 长连接、Kafka 异步链路、MongoDB 聊天记录、MySQL 业务数据、Redis 运行时状态以及独立的 WebRTC 流媒体服务。这个仓库可以作为现代 IM 系统的实践参考覆盖清晰的服务边界、消息投递、已读回执、在线状态、动态通知、富媒体消息、社交关系、动态空间和 Next.js Web 客户端。项目地址https://github.com/iceymoss/go-hichat-api项目亮点基于 go-zero REST 和 zRPC 的微服务架构。通过.api和.proto文件维护 API 优先的服务契约。WebSocket 网关支持认证、心跳、在线状态、消息 ACK、已读回执和实时推送。Kafka 链路处理聊天投递、已读事件、消息撤回、动态通知和后台任务。MongoDB 存储聊天记录MySQL 存储业务数据Redis 存储会话、缓存、在线状态和运行时协调数据。独立 WebRTC 流媒体服务支持通话、会议、屏幕共享、直播、房间和 SFU 流程。web/下提供完整 Web 客户端技术栈为 Next.js 16、React 19、Bun、TypeScript、Tailwind CSS 和 Semi UI。核心能力领域能力用户与账号手机号/密码登录、JWT 签发、手机/邮箱验证码、密码重置、资料管理、头像上传、账号注销、用户搜索和内部用户查询 RPC。社交关系好友申请、好友列表、备注、拉黑、朋友圈权限、消息通知设置、标签、好友举报和在线状态查询。群组建群、搜索群、入群申请、成员邀请、邀请 token、成员管理、群公告、角色、管理员操作、群主转让和群。即时通讯单聊/群聊会话、会话置顶/免打扰、MongoDB 聊天记录、文本/文件/语音/图片/视频消息、引用、提及、未读状态、已读记录、消息撤回和媒体上传。实时网关WebSocket 认证、路由分发、Redis 在线状态、Kafka 消息投递、服务端推送、ACK 跟踪、重试、去重和动态通知。动态空间动态发布、可见范围、媒体资源、评论、回复、点赞、草稿、未读计数、动态消息通知和在线推送。异步任务聊天、已读、撤回和动态通知事件的 Kafka 消费以及 cron 任务扩展点。流媒体WebRTC 单聊语音/视频通话、群组语音/视频通话。Web 客户端Next.js 应用、Bun 脚本、TypeScript、Tailwind CSS、Semi UI。产品截图截取自基于演示数据集运行的 Web 客户端14 个预置用户含好友、群组、会话和动态由 scripts/mockdata 生成。账号登录注册忘记密码即时通讯会话列表单聊会话群会话创建群聊多选 · 免打扰 · 置顶对话内资料卡片音视频通话来电提醒群通话界面多人群通话中好友好友列表 · 详情 · 设置好友申请详情收到的申请我发起的申请动态空间朋友圈发布动态列表 · 详情 · 评论 · 点赞我的朋友圈朋友圈空间点赞 / 评论列表个人主页与设置我的主页我的收藏系统设置更多设置架构┌──────────────────────────────────────────────────────────────────────────────┐ │ L0 客户端层 │ │ │ │ Web Client (web/: Next.js React) Mobile / Third-party Clients │ └───────────────┬────────────────────────────┬───────────────────────────┬─────┘ │ REST │ WebSocket │ WebRTC ▼ ▼ ▼ ┌──────────────────────────────────────────────────────────────────────────────┐ │ L1 接入层 │ │ │ │ HTTP APIs 实时接入 媒体接入 │ │ ┌─────────────────────────────┐ ┌───────────────────────┐ ┌──────────┐ │ │ │ user/api social/api │ │ im/ws │ │streaming │ │ │ │ im/api trend/api │ │ auth heartbeat ack │ │signaling │ │ │ │ REST routes JWT context │ │ online push routing │ │rooms SFU │ │ │ └──────────────┬──────────────┘ └───────────┬───────────┘ └────┬─────┘ │ └─────────────────┼──────────────────────────────┼─────────────────────┼───────┘ │ zRPC │ 发布/消费 │ Redis ▼ ▼ ▼ ┌──────────────────────────────────────────────────────────────────────────────┐ │ L2 领域服务层 │ │ │ │ ┌────────────┐ ┌──────────────┐ ┌────────────┐ ┌──────────────┐ │ │ │ user/rpc │ │ social/rpc │ │ im/rpc │ │ trend/rpc │ │ │ │ 认证 │ │ 好友 │ │ 会话 │ │ 动态 │ │ │ │ 资料 │ │ 群组 │ │ 聊天记录 │ │ 评论 │ │ │ │ 验证码 │ │ 申请 │ │ 已读/撤回 │ │ 点赞/通知 │ │ │ └─────┬──────┘ └──────┬───────┘ └─────┬──────┘ └──────┬───────┘ │ └────────┼────────────────┼────────────────┼────────────────┼─────────────────┘ │ │ │ │ │ MySQL │ MySQL │ MongoDB │ MySQL Kafka ▼ ▼ ▼ ▼ ┌──────────────────────────────────────────────────────────────────────────────┐ │ L3 事件与异步层 │ │ │ │ Kafka Topics │ │ ┌────────────────┐ ┌───────────────┐ ┌────────────────┐ ┌───────────────┐ │ │ │ chat-transfer │ │ read-transfer │ │ recall-transfer│ │ trend-notify │ │ │ └───────┬────────┘ └──────┬────────┘ └───────┬────────┘ └──────┬────────┘ │ │ └─────────────────┴──────────┬───────┴─────────────────┘ │ │ ▼ │ │ apps/task/mq: 持久化聊天、更新已读、推送撤回和动态通知 │ │ apps/task/cron: 统计、清理和可扩展定时任务 │ └────────────────────────────────────────┬─────────────────────────────────────┘ │ 持久化 / 更新 / 推送 ▼ ┌──────────────────────────────────────────────────────────────────────────────┐ │ L4 数据与运行时基础设施 │ │ │ │ MySQL: 用户、好友、群组、动态、评论、点赞、通知 │ │ MongoDB: 聊天记录、已读记录、撤回状态 │ │ Redis: session/JWT 状态、在线状态、缓存、WS 运行态、房间状态 │ │ Etcd: go-zero RPC 服务注册与发现 │ └──────────────────────────────────────────────────────────────────────────────┘ 关键连接 1. Web/Mobile - HTTP APIs - zRPC - Domain RPC - MySQL/MongoDB。 2. Web/Mobile - im/ws - Kafka - task/mq - MongoDB im/ws 推送。 3. trend/rpc - Kafka trend-notify - task/mq - im/ws - 在线客户端。 4. RPC 服务注册到 EtcdAPI 服务从 Etcd 发现 RPC 节点。 5. im/ws 和 streaming 使用 Redis 存储在线状态、会话、缓存和房间状态。服务列表服务层职责userapi,rpc,models账号、认证、资料、验证码、用户查询socialapi,rpc,socialmodels好友、好友申请、群组、群成员、邀请链接、群公告imapi,rpc,ws,models,immodels会话、聊天记录、已读回执、消息撤回、WebSocket 网关trendapi,rpc,models动态、评论、点赞、草稿、媒体、动态通知taskmq,cronKafka 消费者和定时任务streaminginternal,room,sfu,webrtcWebRTC 通话、房间、会议、屏幕共享、直播demo独立示例内部 demo 服务不属于主启动脚本技术栈后端Go 1.25、go-zero、zRPC、gRPC、goctl。实时通信WebSocket、Kafka、WebRTC、Pion。存储MySQL、MongoDB、Redis。服务发现Etcd。前端Next.js 16、React 19、Bun、TypeScript、Tailwind CSS、Semi UI。仓库结构由tree -L 2生成。. ├── CLAUDE.md ├── LICENSE ├── README.md ├── apps │ ├── im │ ├── social │ ├── streaming │ ├── task │ ├── trend │ └── user ├── cmd ├── common ├── config │ ├── config-local.yaml │ └── config-sample.yaml ├── deploy │ ├── dockerfile │ ├── sql │ ├── sql_init.go │ └── trendmig ├── docker-compose.yaml ├── docs │ ├── README.zh-CN.md │ ├── api.md │ ├── development-guide.md │ ├── imgs │ ├── screenshots │ └── specs ├── go.mod ├── go.sum ├── hichat2.sh ├── logs │ ├── im-api │ ├── im-im │ ├── im-rpc │ ├── im-ws │ ├── social-api │ ├── social-rpc │ ├── task-mq │ ├── task-task │ ├── trend-api │ ├── trend-rpc │ ├── user-api │ └── user-rpc ├── pkg │ ├── 2fa │ ├── bitmap │ ├── config │ ├── constants │ ├── ctxdata │ ├── db │ ├── encrypt │ ├── errors │ ├── http │ ├── interceptor │ ├── logger │ ├── message │ ├── relationcache │ ├── sensitive │ ├── storage │ ├── systemconfig │ ├── test │ ├── transaction │ ├── utils │ ├── wuid │ └── xerr ├── resources │ └── sensitive └── web ├── Caddyfile ├── bun.lock ├── components.json ├── dev.log ├── dist ├── download ├── eslint.config.mjs ├── examples ├── next-env.d.ts ├── next.config.ts ├── node_modules ├── package.json ├── postcss.config.mjs ├── public ├── scripts ├── src ├── tailwind.config.ts ├── tsconfig.json ├── tsconfig.tsbuildinfo ├── upload └── worklog.md快速开始一键部署Docker Compose无需本地工具链只要有 Docker克隆后一条命令即可拉起整套服务6 个微服务 中间件 前端gitclone https://github.com/iceymoss/go-hichat-api.gitcdgo-hichat-apidockercompose up-d--build随后访问http://localhost:2470。首次使用点「注册」即可——演示模式下验证码会自动填入输入框无需真实短信填昵称密码即可注册登录。dockercomposeps# 查看各服务状态dockercompose logs-fweb# 跟踪某个服务日志dockercompose down# 停止保留数据dockercompose down-v# 停止并清空所有数据卷# 一键清理删数据卷 删本项目构建的镜像dockercompose down-v--remove-orphansdockerimageshichat-*-q|xargs-rdockerrmi架构、端口、清理卸载、服务器域名反向代理 HTTPS部署、音视频TURN说明详见 Docker 部署指南。填充演示数据可选部署完想立刻有数据可点、可截图内置的数据生成器会注册14 个中文示例用户并灌入好友、群组、单聊/群聊、动态及评论点赞——即 产品截图 里展示的那套数据。用 Docker Compose 部署的无需本机 Go 工具链直接跑随仓库附带的一次性服务dockercompose--profilemock run--rmmockdata从源码运行的已装 Gogo run ./scripts/mockdata# 完整数据集go run ./scripts/mockdata -trends-only# 只重灌动态/评论/点赞随后访问http://localhost:2470用主角账号登录手机号13800138000密码hichat2024。14 个账号同密码手机号为13800138000–13800138013。仅在「全新/空库」上跑一次重复运行会产生重复的好友申请与群。它只插入演示数据不会删除任何东西。人设与内容脚本见scripts/mockdata。前置依赖Go 1.25 或更高版本与go.mod的go指令一致。Web 客户端需要 Bun。MySQL、Redis、Etcd、MongoDB 和 Kafka。go-zero 工具链goctl、protoc、protoc-gen-go和protoc-gen-go-grpc。本地依赖安装和代码生成说明见 开发指南。启动后端服务先启动所需基础设施再运行主后端服务./hichat2.sh该脚本会启动 user、social、IM、task 和 trend 服务并将日志写入logs/。按需手动启动单个服务go run apps/service/layer/service.go-fapps/service/layer/etc/service-sample.yaml单独启动 streaming 服务apps/streaming/start.sh启动 Web 客户端cdweb buninstallbun devWeb 开发服务默认运行在3001端口。开发开发指南本地中间件配置、go-zero 工具链、代码生成、启动说明和 Docker 示例。API 文档生成的 REST 和 gRPC 契约汇总。功能规格功能分析、设计说明和实现记录。测试在仓库根目录运行后端测试gotest./...-count1在web/下运行前端 lintbun lint贡献请参考 贡献指南 了解贡献规范。许可证本项目基于 Apache License 2.0 开源。