grpc连接mysql_golang写的IM服务器(tcp,websocket,grpc)

本文介绍了使用Golang编写的即时通讯(IM)服务器gim,支持TCP、WebSocket和gRPC接入。服务器采用Mysql+Redis作为数据库,使用gRPC进行通讯,并详细阐述了安装部署、测试流程、业务服务器接入方法以及各种协议和接口。此外,还讨论了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连接层服务器,逻辑层服务器

迅速跑通本地测试

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值