buexplain / netsvr-protocol
https://github.com/buexplain/netsvr的协议
Package info
github.com/buexplain/netsvr-protocol
Language:Go
pkg:composer/buexplain/netsvr-protocol
v7.0.1
2026-09-13 02:36 UTC
Requires
- php: >=8.0
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
这套proto是https://github.com/buexplain/netsvr的网关层与业务层的交互协议。
指令有如下三种类别:
- 网关单向转发给业务进程的指令
- 业务进程单向请求网关的指令
- 业务进程请求网关,网关处理完毕再响应给业务进程的指令
网关单向转发给业务进程的指令
| 名称 | 编号 | proto | 说明 |
|---|---|---|---|
| websocket连接打开 | ConnOpen | connOpen.proto | 网关转发客户端连接打开的信息到业务进程 |
| websocket连接打开信息回调到业务接口的返回值 | 无 | connOpenResp.proto | 网关通过http协议转发客户端连接打开的信息到业务进程http接口,接口返回给网关的数据 |
| websocket连接关闭 | ConnClose | connClose.proto | 网关转发客户端连接关闭的信息到业务进程 |
| 透传客户端的websocket数据 | Transfer | transfer.proto | 网关转发客户端连接发来的数据到业务进程 |
业务进程单向请求网关的指令
| 名称 | 编号 | proto | 说明 |
|---|---|---|---|
| 更新连接的信息 | ConnInfoUpdate | connInfoUpdate.proto | 每个客户端连接都可以在网关中存储:业务系统唯一id、订阅的主题标签、session信息,该指令用于设置这些信息 |
| 删除连接的信息 | ConnInfoDelete | connInfoDelete.proto | 删除客户连接的:业务系统唯一id、订阅的主题标签、session信息 |
| 批量广播 | BroadcastBulk | broadcastBulk.proto | 一次请求向网关中所有客户端连接广播多条信息 |
| 根据uniqId批量单播 | SingleCastBulk | singleCastBulk.proto | 一次请求向多个连接发送数据,每一项内的多条数据按顺序依次发给本项内的每一个连接 |
| 根据customerId批量单播 | SingleCastBulkByCustomerId | singleCastBulkByCustomerId.proto | 一次请求向多个客户的连接发送数据,每一项内的多条数据按顺序依次发给本项内的每一个客户 |
| 订阅某几个主题 | TopicSubscribe | topicSubscribe.proto | 客户端连接订阅某几个主题的数据,比如客户端加入的群的id,用于接收该群的消息 |
| 取消订阅某几个主题 | TopicUnsubscribe | topicUnsubscribe.proto | 客户端连取消订阅某几个主题的数据,比如客户端退群了,可以将之前订阅的群id删除 |
| 删除某几个主题 | TopicDelete | topicDelete.proto | 删除网关中某几个主题,所有订阅了这些被删除主题的客户端连接都会取消订阅它们 |
| 批量发布到某几个主题 | TopicPublishBulk | topicPublishBulk.proto | 一次请求向多个主题发布数据,每一项内的多条数据按顺序依次发布给本项内的每一个主题 |
| 强制关闭某几个连接 | ForceOffline | forceOffline.proto | 根据uniqId,强制关闭某几个客户端连接,比如客户在多个设备连接到网关,则可用此指令去强制关闭客户其它设备的连接 |
| 强制关闭某几个客户的所有连接 | ForceOfflineByCustomerId | forceOfflineByCustomerId.proto | 根据customerId强制关闭某个客户连接,一般是剔下线用,该客户在所有设备登录到网关的所有连接都会被关闭 |
| 强制关闭某几个空session、空customerId的连接 | ForceOfflineGuest | forceOfflineGuest.proto | 强制关闭某个空session值与空customerId的连接,比如客户端连接到网关,但是并没有发起账号密码登录的请求,此时业务侧又不希望此类连接一直逗留在网关中,则可以用该指令去延迟一分钟后强制关闭它,当然如果一分钟后,客户端登录成功,则不会关闭 |
业务进程请求网关,网关处理完毕再响应给业务进程的指令
| 名称 | 编号 | proto | 说明 |
|---|---|---|---|
| 注册到网关 | Register | registerReq.proto、registerResp.proto | 业务进程向网关发出注册指令,注册成功后,业务进程会收到网关转发的客户端websocket消息 |
| 撤销注册 | Unregister | unRegisterReq.proto、unRegisterResp.proto | 业务进程向网关发出取消注册指令,取消注册成功后,业务进程不会再收到客户端websocket消息 |
| 检查uniqId是否在线 | CheckOnline | checkOnlineReq.proto、checkOnlineResp.proto | 判断某几个uniqId是否在线,有则返回uniqId值 |
| 获取网关中全部的customerId | CustomerIdList | customerIdListResp.proto | 多网关合并后需去重(同一客户可能连到多个网关) |
| 统计网关中customerId的数量 | CustomerIdCount | customerIdCountResp.proto | 网关内按customerId去重;多网关相加会重复统计同一个客户 |
| 获取全部连接的uniqId | UniqIdList | uniqIdListResp.proto | 多网关合并即为全部连接,不会重复 |
| 统计网关的在线连接数 | UniqIdCount | uniqIdCountResp.proto | 一个连接只属于一个网关,多网关相加不重复 |
| 获取网关的全部主题 | TopicList | topicListResp.proto | 多网关合并后需去重(同名主题可能分布在不同网关) |
| 统计网关的主题数量 | TopicCount | topicCountResp.proto | 网关内主题唯一;多网关相加会重复统计同名主题 |
| 获取网关中某几个主题包含的uniqId | TopicUniqIdList | topicUniqIdListReq.proto、topicUniqIdListResp.proto | 多网关合并同名主题即为全部,不会重复 |
| 统计网关中某几个主题包含的uniqId数量 | TopicUniqIdCount | topicUniqIdCountReq.proto、topicUniqIdCountResp.proto | 当前网关内去重统计;topics 为空则统计全部主题;多网关相加不重复 |
| 获取网关中某几个主题的customerId | TopicCustomerIdList | topicCustomerIdListReq.proto、topicCustomerIdListResp.proto | 多网关合并同名主题后需去重(同一客户可能连到多个网关) |
| 获取网关中某几个主题的customerId以及对应的uniqId列表 | TopicCustomerIdToUniqIdsList | topicCustomerIdToUniqIdsListReq.proto、topicCustomerIdToUniqIdsListResp.proto | 值为该客户在当前网关内的全部连接(不限该主题);多网关需合并同一 customerId 的 uniqId 列表 |
| 统计网关中某几个主题的customerId数量 | TopicCustomerIdCount | topicCustomerIdCountReq.proto、topicCustomerIdCountResp.proto | 当前网关内去重统计;topics 为空则统计全部主题;多网关相加会重复统计同一个客户 |
| 获取uniqId的连接信息 | ConnInfo | connInfoReq.proto、connInfoResp.proto | 多网关合并即为命中结果,不会重复 |
| 获取customerId的连接信息 | ConnInfoByCustomerId | connInfoByCustomerIdReq.proto、connInfoByCustomerIdResp.proto | 多网关需合并同一 customerId 的连接列表 |
| 获取网关状态的统计信息 | Metrics | metricsResp.proto | 仅当前网关自身的统计;count 可相加,速率类不可相加 |
| 设置并返回限流配置 | Limit | limitReq.proto、limitResp.proto | 先更新限流配置,如果传递的值无效,则会忽略它;再返回当前网关的最新限流配置(每个网关各自维护) |