新增 RPC 与 task action
快速上手:已有服务增加 SS RPC
以大厅服为例,修改 src/lobbysvr/protocol/protocol/pbdesc/lobby_service.proto。
沿用文件已有的 package 和 import,增加请求/响应,并将方法加入已有 LobbysvrService:
message SSEchoTextReq { string text = 1; }
message SSEchoTextRsp { string text = 1; }
// Add inside the existing LobbysvrService.
rpc echo_text(SSEchoTextReq) returns (SSEchoTextRsp) {
option (atframework.rpc_options) = {
module_name: "action"
api_name: "EchoText"
allow_no_wait: false
};
}
按统一构建步骤重新配置并构建,不用新增模板或修改现有生成流程。
生成器创建 src/lobbysvr/service/logic/action/task_action_echo_text.h/.cpp,并更新注册代码和 SDK。
在新 action 的 operator() 中写入:
task_action_echo_text::result_type task_action_echo_text::operator()() {
get_response_body().set_text(get_request_body().text());
RPC_RETURN_CODE(0);
}
再次构建后,服务端通过已有的 register_handles_for_lobbysvrservice() 注册新方法。
调用方包含生成的 rpc/lobby/lobbysvrservice.atfw.gen.h,使用其中的 echo_text 接口;
目标参数和命名空间以生成的函数声明为准。
等待 RPC 完成
调用需要回包的 RPC 时,使用以下宏等待 RPC 完成后再处理回包。
即使不关注回包或返回值,也要用 RPC_AWAIT_IGNORE_RESULT 显式标明,不直接丢弃调用返回的框架结果对象。
| 用法 | 作用 |
|---|---|
RPC_AWAIT_CODE_RESULT(call) | 等待调用完成并取得整数错误码 |
RPC_AWAIT_TYPE_RESULT(call) | 等待调用完成并取得对应类型的结果值 |
RPC_AWAIT_IGNORE_RESULT(call) | 等待调用完成,显式忽略返回结果 |
这些宏统一适配 C++20 协程和传统有栈协程,业务代码使用同一套等待方式。
忽略结果仍会等待 RPC 完成。对非 router 的 stream 或 allow_no_wait RPC,需要只发送不等回包时使用
rpc::<module>::oneway::<rpc>();它同步返回发送结果,可在 task 外调用。普通 unary 的 __no_wait 是
另一种参数形式;__wait_later 用于之后等待响应,不是 no-wait。