Relay 消息协议
Understand how the Relay message protocol transmits data between clients and servers in the Relay service.
阅读时间13 分钟最后更新于 1 个月前
如果您在项目中将 Relay SDK 搭配 UTP 或者搭配 NGO 使用,则支持 Relay 消息协议。不过,如果您使用的是其他引擎或网络解决方案,则需要在使用前实施 Relay 消息协议。请使用 Relay 消息协议规范来实施 Relay 消息协议。 Relay 消息协议要求以“大端序”(也称为“网络序”)表示字段值,即高位先行。 除使用 HMAC 签名的
BIND消息类型
| 代码 | 名称 | 描述 |
| | |
| | |
| | |
| | |
| 预留。 | |
| 预留。 | |
| | |
| 预留。 | |
| 预留。 | |
| | |
| | |
| | |
| | |
接受模式类型
“接受模式”定义了 Relay 服务器处理客户端连接请求的方式。 Relay 仅支持AUTOAUTO| 代码 | 名称 | 描述 |
| | |
| 预留。 |
标准标头
所有消息类型均使用相同的标准标头,其中包含签名、Relay 消息协议版本以及报文主体中包含的消息。| 字节 | 1 ..2 | 3 | 4 |
| 用途 | | | |
| 字段 | 类型 | 描述 |
| []byte | |
| uint8 | |
| uint8 | |
消息主体
BIND 消息
BINDBINDBINDBINDBINDNonce| 字节 | 1 ..4 | 5 | 6 ..7 | 8 | 9 ..N | N+1 ..33 |
| 用途 | 标头(类型 0) | | | | | |
BIND| 字段 | 类型 | 描述 |
| uint8 | |
| uint16 | |
| uint8 | |
| []byte | |
| [32]byte | |
安全
必须使用从分配服务返回的密钥对 HMAC 进行签名。如果 HMAC 无效,则 Relay 服务器会静默拒绝BIND messageBIND messageBIND_RECEIVED 消息
Relay 服务器向请求客户端发送BIND_RECEIVEDBIND messageCONNECT_REQUEST message| 字节 | 1 ..4 |
| 用途 | 标头(类型 1) |
PING 消息
PINGPING
每条
PINGPINGPING| 字节 | 1 ..4 | 5 ..20 | 21 ..22 |
| 用途 | 标头(类型 2) | | |
PING| 字段 | 类型 | 描述 |
| [16]byte | |
| uint16 | |
CONNECT_REQUEST 消息
CONNECT_REQUESTToConnectionData| 字节 | 1 ..4 | 5 ..20 | 21 | 22 .. |
| 用途 | 标头(类型 3) | | | |
CONNECT_REQUEST| 字段 | 类型 | 描述 |
| [16]byte | |
| uint8 | |
| []byte | |
ACCEPTED 消息
Relay 服务器会在请求客户端成功连接到目标客户端后,向请求客户端发送一条ACCEPTED| 字节 | 1 ..4 | 5 ..20 | 21 ..36 |
| 用途 | 标头(类型 6) | | |
ACCEPTED| 字段 | 类型 | 描述 |
| [16]byte | |
| [16]byte | |
DISCONNECT 消息
DISCONNECTCONNECT_REQUESTDISCONNECTDISCONNECTDISCONNECTERROR messageRELAYCONNECT_REQUEST message| 字节 | 1 ..4 | 5 ..20 | 21 ..36 |
| 用途 | 标头(类型 9) | | |
DISCONNECT| 字段 | 类型 | 描述 |
| [16]byte | |
| [16]byte | |
RELAY 消息
RELAYRELAYBIND messageFromAllocationIDErrClientPlayerMismatchERRORCONNECT_REQUESTErrNotConnectedERROR messageToAllocationIDFromAllocationID| 字节 | 1 ..4 | 5 ..20 | 21 ..36 | 37 ..38 | 39 .. |
| 用途 | 标头(类型 10) | | | | |
下表对
RELAY| 字段 | 类型 | 描述 |
| [16]byte | |
| [16]byte | |
| uint16 | |
| []byte | |
CLOSE 消息
CLOSECLOSECLOSECLOSEERRORCLOSECLOSECLOSEBINDPING| 字节 | 1 ..4 | 5 ..20 |
| 用途 | 标头(类型 11) | |
CLOSE| 字段 | 类型 | 描述 |
| [16]byte | |
ERROR 消息
Relay 服务器严格使用ERROR| 字节 | 1 ..4 | 5 ..20 | 21 |
| 用途 | 标头(类型 12) | | |
ERROR| 字段 | 类型 | 描述 |
| [16]byte | |
| uint8 | |
错误代码
下表对 Relay 服务器可能发送到客户端的每个错误消息进行了介绍。| 代码 | 名称 | 描述 |
| 无效协议版本 ( | 当解析后的消息中包含无效的协议版本时,会返回 |
| 玩家因无活动而超时 ( | 当客户端与 Relay 服务器的绑定超时后,会返回 |
| 未授权 ( | 当客户端尝试执行未经授权的操作时,会返回 |
| 分配 ID 客户端不匹配 ( | 客户端使用未知的网络连接向服务器发送 |
| 未找到分配 ID ( | 当 Relay 服务器无法找到给定分配 ID 对应的分配时,会返回 |
| 未连接 ( | 当客户端尝试与未连接的客户端通信时,会返回 |
| 不允许自连接 ( | 当客户端向具有相同分配 ID 的客户端发送 |