littlebot
Published on 2025-04-07 / 0 Visits
0

【源码】基于Go语言的即时通讯服务器

项目简介

本项目是基于Go语言的即时通讯服务器,拥有多协议接入、离线消息同步、多业务接入、单用户多设备在线、多种聊天场景支持及服务水平扩展等功能。采用Mysql和Redis作为数据库,GRPC作为通讯框架,Protocol Buffers作为长连接通讯协议,Zap作为日志框架。

项目的主要特性和功能

  1. 连接方式多样,支持TCP和WebSocket接入。
  2. 支持离线消息同步,保证用户离线时消息不丢失,上线后可同步。
  3. 支持多业务接入,可让不同业务系统接入。
  4. 允许单用户多设备在线,同一用户能在多个设备同时登录使用。
  5. 支持多种聊天场景,包括单聊、群聊以及超大群聊天。
  6. 服务具备水平扩展能力,可应对高并发场景。
  7. 消息转发逻辑灵活,普通群组采用写扩散且支持离线消息同步,超大群组采用读扩散但不支持离线消息同步。

安装使用步骤

安装部署

  1. 安装MySQL和Redis。
  2. 创建数据库gim,执行sql/create_table.sql完成初始化表的创建,数据库包含测试用的初始数据。
  3. 修改config下的配置文件,使其与本地配置一致。
  4. 分别切换到cmd的tcp_conn、ws_conn、logic目录下,执行go run main.go,启动TCP连接层服务器、WebSocket连接层服务器、逻辑层服务器。注意,tcp_conn使用了linux的系统调用,只能在linux环境下启动;若为其他环境,可在安装docker的前提下,执行run.sh启动。

迅速跑通本地测试

  1. 在test目录下的tcp_conn或者ws_conn目录下,执行go run main,启动测试脚本。
  2. 根据提示,依次填入app_id、user_id、device_id、sync_sequence(中间用空格隔开)进行长连接登录,数据库device表中已初始化部分设备信息用于测试。
  3. 执行api/logic/logic_client_ext_test.go下的TestLogicExtServer_SendMessage函数,发送消息。

业务服务器接入

  1. 生成私钥和公钥。
  2. 在app表里根据私钥添加一条app记录。
  3. 将app_id和公钥保存到业务服务器。
  4. 通过LogicClientExtServer.AddUser接口将用户添加到IM服务器。
  5. 通过LogicClientExtServer.RegisterDevice接口注册设备,获取设备id(device_id)。
  6. 用公钥对app_id、user_id、device_id进行加密,生成token,相应库的代码在pkg/util/aes.go。
  7. 使用该token,app即可与IM服务器交互。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】