核心理念: 采用 双通道架构。非实时业务 (大厅/养成) 走 HTTP 短连接,实时业务 (战斗/组队) 走 TCP/KCP 长连接。
POST /api/v1/{service}/{method}
我们统一使用 Google Protobuf (v3) 作为序列化标准。
所有 Socket 消息包遵循以下头部格式:
struct PacketHeader {
uint16_t length; // 包体长度
uint16_t msg_id; // 消息ID (映射到具体 Proto)
uint32_t seq; // 序列号 (防重放/乱序)
uint32_t checksum; // 校验和 (CRC32)
// Body follows...
};
syntax = "proto3";
package Game.Protocol;
// 登录请求 (MsgID: 1001)
message C2S_Login {
string account = 1;
string token = 2;
string device_id = 3;
int32 client_version = 4;
}
// 登录响应 (MsgID: 1002)
message S2C_Login {
int32 error_code = 1; // 0 = Success
int64 server_time = 2;
UserProfile profile = 3;
}
request_uuid,服务器缓存该 ID 的处理结果 5-10 秒。如果收到重复请求,直接返回缓存结果,不重复扣费。error_code。1001: Token 过期 (需重新登录)。1002: 服务器维护中。2001: 资源不足。SessionToken。Authorization: Bearer {token}。AuthPacket。seq (序列号)。服务器记录该连接处理过的最大 seq,小于等于该值的包直接丢弃。