Files
2026-05-07 15:54:43 +08:00

85 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ProtoBufModule
本模块承载 **RPC 与业务消息的二进制契约**:所有 TCP 链路上传输的业务体都通过此处定义的 `protobuf` 生成 Java 类(包名 `com.huangzj.cmd.gen`)。
## 职责
- 维护 `src/main/protobuf` 下的 `.proto` 源文件。
- Maven `protobuf-maven-plugin``generate-sources` 阶段生成 Java 源码到 `target/generated-sources/protobuf/java`
- **其它模块**BaseModule、ServerModule、CrossModule)仅依赖本模块打出的 jar,不重复拷贝 `.proto`
## 目录结构(源文件)
```text
src/main/protobuf/
└── serverProto/
├── cmd_rpc.proto # CmdRpcEnvelope、各 CTS/STC、Method 枚举
└── pb_service.proto # PbServiceService_1 ~ Service_4
```
> 历史上独立的 `CrossProto` 已移除;跨服与区服共用 **`demo.cmd`** 包下的消息,通过 **service/method + CommandSource** 在 Java 侧区分语义。
## 网络层核心消息:`CmdRpcEnvelope`
```protobuf
message CmdRpcEnvelope {
uint32 service_id = 1;
uint32 method_id = 2;
bytes payload = 3; // 具体 CTS 的序列化字节
int32 cross_ret = 4; // 预留/透传
uint32 link_seq = 5; // 区服↔跨服长连接多路复用序号(客户端 TCP 可为 0)
}
```
### `link_seq` 的作用(与网络实现配合)
```mermaid
sequenceDiagram
participant Z as 区服 CrossTcpClient
participant X as 跨服 TCP
Note over Z,X: 单条 TCP 上可能同时存在多帧在途
Z->>X: 请求 A (link_seq=101)
Z->>X: 请求 B (link_seq=102)
X-->>Z: 响应 B (link_seq=102)
X-->>Z: 响应 A (link_seq=101)
```
- 区服在 **`CrossTcpClient`** 内为每次 `roundTrip` / 注册 / 心跳分配 **非 0**`link_seq`
- 跨服命令通过 **`AbstractTypedPbCommand`** 回包时 **原样带回** 请求信封中的 `link_seq`,以便客户端把响应与 `CompletableFuture` 对应。
## 服务与方法枚举
| PbService | 用途 |
|-----------|------|
| Service_1 | 路径 1 示例(Echo |
| Service_2 | 跨服业务 Method2`CrossForward*` |
| Service_3 | 路径 3 区服对客户端暴露的中转接口 |
| Service_4 | **链路控制**Register、Heartbeat(仅区服→跨服长连接上使用) |
`Service4_Method``Register``Heartbeat`,载荷分别为 `CrossLinkRegisterCts/Stc``CrossLinkHeartbeatCts/Stc`
## 业务消息(与路径对应)
- **路径 1**`CmdEchoCts` / `CmdEchoStc`
- **路径 2(客户端侧)**`CrossProxyCts` / `CrossProxyStc`(区服内会转为 `CrossForward*` 再发往跨服)。
- **路径 3**:客户端 payload 使用 **`CrossForwardCts`** 形态(与跨服 Service_2/Method2 一致),信封为 Service_3/Method3。
- **跨服 Service_2/Method2**`CrossForwardCts` / `CrossForwardStc`
## 生成代码
```bash
cd ProtoBufModule
mvn -q generate-sources
# 或使用 genpb.batWindows,会探测 Maven
```
生成物加入 `ProtoBufModule` jar,依赖方编译时自动可见。
## 扩展约定
新增 RPC 时建议:
1.`pb_service.proto` 增加 `PbService` 枚举值(若新服务号)。
2.`cmd_rpc.proto` 增加 `ServiceX_Method` 与 CTS/STC `message`
3. 执行 `generate-sources` 后,在 **BaseModule** 侧通过 `@Cmd` + `AbstractTypedPbCommand``GameCommand` 实现逻辑,并由 **`ProtoRegistryAutoConfigurer`** 自动注册 `ProtoInfo`(强类型命令)。