Relay 消息协议
Understand how the Relay message protocol transmits data between clients and servers in the Relay service.
阅读时间13 分钟最后更新于 15 天前
如果您在项目中将 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 的客户端发送 |