当前位置: 首页 > news >正文

分享我的开源项目: 基于Go开发的微服务即时通讯与社交平台

工作之余断断续续开发了一年时间,欢迎stars

go-hichat-api

English | 简体中文

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 服务注册到 Etcd;API 服务从 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-orphans&&dockerimages'hichat-*'-q|xargs-rdockerrmi

架构、端口、清理卸载、服务器域名(反向代理 + HTTPS)部署、音视频(TURN)说明详见 Docker 部署指南。

填充演示数据(可选)

部署完想立刻有数据可点、可截图?内置的数据生成器会注册14 个中文示例用户,并灌入好友、群组、单聊/群聊、动态及评论点赞——即 产品截图 里展示的那套数据。

用 Docker Compose 部署的(无需本机 Go 工具链),直接跑随仓库附带的一次性服务:

dockercompose--profilemock run--rmmockdata

从源码运行的(已装 Go):

go run ./scripts/mockdata# 完整数据集go run ./scripts/mockdata -trends-only# 只重灌动态/评论/点赞

随后访问http://localhost:2470,用主角账号登录:

  • 手机号13800138000,密码hichat2024。14 个账号同密码,手机号为1380013800013800138013

仅在「全新/空库」上跑一次;重复运行会产生重复的好友申请与群。它只插入演示数据,不会删除任何东西。人设与内容脚本见scripts/mockdata

前置依赖

  • Go 1.25 或更高版本(与go.modgo指令一致)。
  • Web 客户端需要 Bun。
  • MySQL、Redis、Etcd、MongoDB 和 Kafka。
  • go-zero 工具链:goctlprotocprotoc-gen-goprotoc-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 dev

Web 开发服务默认运行在3001端口。

开发

  • 开发指南:本地中间件配置、go-zero 工具链、代码生成、启动说明和 Docker 示例。
  • API 文档:生成的 REST 和 gRPC 契约汇总。
  • 功能规格:功能分析、设计说明和实现记录。

测试

在仓库根目录运行后端测试:

gotest./...-count=1

web/下运行前端 lint:

bun lint

贡献

请参考 贡献指南 了解贡献规范。

许可证

本项目基于 Apache License 2.0 开源。

http://www.jsqmd.com/news/1108475/

相关文章:

  • SEO 进阶:如何利用 sitemap 在线生成器提升 30% 索引率
  • 三菱Q系列以太网通讯架构赋能城市排水管网智能调度管理系统
  • 收藏!AI时代如何选择值得加入的公司?毕业生必看!
  • Sunshine游戏串流主机:打造你的个人游戏云服务器终极指南
  • AI 图片生成技术解析:扩散模型、多模态与图像编辑的协同机制
  • GetQzonehistory:找回那些被遗忘的QQ空间记忆,一键备份你的数字青春
  • Sunshine游戏串流终极指南:三步打造你的私人云游戏服务器
  • WinAsar:Windows上最轻量的Electron asar文件管理器
  • Dify 1.15 人工介入功能详解:构建可控AI工作流
  • 如何在单台电脑上实现完美分屏游戏:Nucleus Co-Op完整指南
  • STM32F207ZG与A5000安全芯片的物联网安全连接方案
  • awesome-pentest:一份渗透测试资源清单
  • 7月必看!今年最值得关注的科技大事件
  • 服装店老板的痛点,这套收银系统一次解决
  • VMware虚拟机3D加速配置全攻略:5步开启硬件加速,解决黑屏/卡顿/渲染失败99%的疑难杂症
  • 深度掌控AMD Ryzen处理器:SMUDebugTool硬件级调试实战指南
  • 三步构建你的跨平台游戏云:绕过硬件限制的智能串流方案
  • GLM-5.1 与 GLM-5.2关键区别
  • 三月七小助手:你的星穹铁道终极自动化伴侣完整指南
  • Web自动化测试全流程实战:从Selenium到CI/CD集成
  • 提升门遇阻回弹功能实现原理
  • 勒索软件应急响应实战手册:从攻击原理到恢复策略
  • 【生产环境零容忍】:VMware虚拟机固定IP的7个致命配置错误,第4个导致集群网络中断超47小时
  • 空洞骑士模组管理终极方案:如何用Scarab模组管理器轻松管理100+游戏模组
  • 2026年AI大模型技术深度解析:小白也能轻松掌握的5大核心技术(收藏版)
  • 一键捕获完整网页:Full Page Screen Capture终极指南
  • 2026支持私有化部署的GEO服务机构盘点 数据安全外贸AI搜索引擎选型指南
  • 如何彻底告别网盘限速:2025年最全LinkSwift直链下载助手使用教程
  • 2026年10款企业AI数字人软件盘点:品牌形象定制方案推荐
  • ncmdump终极指南:三分钟解锁网易云音乐NCM格式,实现跨平台播放自由