项目简介
本项目是基于Go语言的即时通讯服务器,拥有多协议接入、离线消息同步、多业务接入、单用户多设备在线、多种聊天场景支持及服务水平扩展等功能。采用Mysql和Redis作为数据库,GRPC作为通讯框架,Protocol Buffers作为长连接通讯协议,Zap作为日志框架。
项目的主要特性和功能
- 连接方式多样,支持TCP和WebSocket接入。
- 支持离线消息同步,保证用户离线时消息不丢失,上线后可同步。
- 支持多业务接入,可让不同业务系统接入。
- 允许单用户多设备在线,同一用户能在多个设备同时登录使用。
- 支持多种聊天场景,包括单聊、群聊以及超大群聊天。
- 服务具备水平扩展能力,可应对高并发场景。
- 消息转发逻辑灵活,普通群组采用写扩散且支持离线消息同步,超大群组采用读扩散但不支持离线消息同步。
安装使用步骤
安装部署
- 安装MySQL和Redis。
- 创建数据库gim,执行sql/create_table.sql完成初始化表的创建,数据库包含测试用的初始数据。
- 修改config下的配置文件,使其与本地配置一致。
- 分别切换到cmd的tcp_conn、ws_conn、logic目录下,执行go run main.go,启动TCP连接层服务器、WebSocket连接层服务器、逻辑层服务器。注意,tcp_conn使用了linux的系统调用,只能在linux环境下启动;若为其他环境,可在安装docker的前提下,执行run.sh启动。
迅速跑通本地测试
- 在test目录下的tcp_conn或者ws_conn目录下,执行go run main,启动测试脚本。
- 根据提示,依次填入app_id、user_id、device_id、sync_sequence(中间用空格隔开)进行长连接登录,数据库device表中已初始化部分设备信息用于测试。
- 执行api/logic/logic_client_ext_test.go下的TestLogicExtServer_SendMessage函数,发送消息。
业务服务器接入
- 生成私钥和公钥。
- 在app表里根据私钥添加一条app记录。
- 将app_id和公钥保存到业务服务器。
- 通过LogicClientExtServer.AddUser接口将用户添加到IM服务器。
- 通过LogicClientExtServer.RegisterDevice接口注册设备,获取设备id(device_id)。
- 用公钥对app_id、user_id、device_id进行加密,生成token,相应库的代码在pkg/util/aes.go。
- 使用该token,app即可与IM服务器交互。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】