简要介绍
gim是一个即时通讯服务器,代码全部使用golang完成。主要功能
1.支持tcp,websocket接入
2.离线消息同步
3.多业务接入
4.单用户多设备同时在线
5.单聊,群聊,以及超大群聊天场景
6.支持服务水平扩展
使用技术:
数据库:Mysql+Redis
通讯框架:Grpc
长连接通讯协议:Protocol Buffers
日志框架:Zap
安装部署
1.首先安装MySQL,Redis
2.创建数据库gim,执行sql/create_table.sql,完成初始化表的创建(数据库包含提供测试的一些初始数据)
3.修改config下配置文件,使之和你本地配置一致
4.分别切换到cmd的tcp_conn,ws_conn,logic目录下,执行go run main.go,启动TCP连接层服务器,WebSocket连接层服务器,逻辑层服务器
迅速跑通本地测试
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服务器交互
rpc接口简介
项目所有的proto协议在gim/public/proto/目录下
1.tcp.proto
长连接通讯协议
2.logic_client.ext.proto
对客户端(Android设备,IOS设备)提供的rpc协议
3.logic_server.ext.proto
对业务服务器提供的rpc协议
4.logic.int.proto
对conn服务层提供的rpc协议
5.conn.int.proto
对logic服务层提供的rpc协议
项目目录简介
api: 服务对外提供的grpc接口
cmd: 服务启动入口
config: 服务配置
internal: 每个服务私有代码
pkg: 服务共有代码
sql: 项目sql文件
test: 长连接测试脚本
服务简介
1.tcp_conn
维持与客户端的TCP长连接,心跳,以及TCP拆包粘包,消息编解码
2.ws_con