goim Java_goim是一个golang写的IM服务器

gim是一个使用Golang编写的即时通讯服务器,支持TCP和WebSocket接入,具备离线消息同步、多业务接入、单用户多设备在线、单聊/群聊等功能。采用MySQL+Redis作为数据库,GRPC作为通讯框架,使用Protocol Buffers作为长连接协议,日志框架为Zap。部署涉及MySQL、Redis的安装,并通过不同目录启动服务器。项目提供了测试脚本和多种RPC接口,详细介绍了TCP粘包拆包、单用户多设备支持、离线消息同步的实现方式,以及读扩散和写扩散的概念。此外,还讨论了错误处理、链路追踪和日志打印的策略。
摘要由CSDN通过智能技术生成

简要介绍

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连接层服务器,逻辑层服务器

注意: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服务器交互

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.tc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值