PageSourceSearch

https://atframe.work/assets/js/4bcc444e.a2884359.js

js atframe.work collected 2026-09-25 22:30:15 UTC 8,854 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkatsf4g_co_docs||=[]).push([[6482],{7255(e,s,r){r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>t,default:()=>h,frontMatter:()=>n,metadata:()=>c,toc:()=>l});const c=JSON.parse('{"id":"architecture/message-flow","title":"\u6d88\u606f\u6d41\u4e0e\u7ebf\u7a0b\u6a21\u578b","description":"\u4e8b\u4ef6\u5faa\u73af","source":"@site/docs/architecture/message-flow.md","sourceDirName":"architecture","slug":"/architecture/message-flow","permalink":"/architecture/message-flow","draft":false,"unlisted":false,"editUrl":"https://github.com/atframework/atsf4g-co/edit/main/doc/docs/architecture/message-flow.md","tags":[],"version":"current","frontMatter":{"title":"\u6d88\u606f\u6d41\u4e0e\u7ebf\u7a0b\u6a21\u578b"},"sidebar":"docs","previous":{"title":"\u67b6\u6784\u603b\u89c8","permalink":"/architecture/overview"},"next":{"title":"\u7f51\u5173\u4e0e\u4ee3\u7406","permalink":"/architecture/gateway-proxy"}}');var d=r(6070),i=r(3797);const n={title:"\u6d88\u606f\u6d41\u4e0e\u7ebf\u7a0b\u6a21\u578b"},t="\u6d88\u606f\u6d41\u4e0e\u7ebf\u7a0b\u6a21\u578b",a={},l=[{value:"\u4e8b\u4ef6\u5faa\u73af",id:"\u4e8b\u4ef6\u5faa\u73af",level:2},{value:"\u5ba2\u6237\u7aef\u6d88\u606f\u6d41\uff08CS\uff09",id:"\u5ba2\u6237\u7aef\u6d88\u606f\u6d41cs",level:2},{value:"\u670d\u52a1\u95f4\u6d88\u606f\u6d41\uff08SS\uff09",id:"\u670d\u52a1\u95f4\u6d88\u606f\u6d41ss",level:2},{value:"\u6570\u636e\u5e93\u6d88\u606f\u6d41",id:"\u6570\u636e\u5e93\u6d88\u606f\u6d41",level:2},{value:"\u6302\u8d77/\u5524\u9192\u539f\u8bed",id:"\u6302\u8d77\u5524\u9192\u539f\u8bed",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",mermaid:"mermaid",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s.header,{children:(0,d.jsx)(s.h1,{id:"\u6d88\u606f\u6d41\u4e0e\u7ebf\u7a0b\u6a21\u578b",children:"\u6d88\u606f\u6d41\u4e0e\u7ebf\u7a0b\u6a21\u578b"})}),"\n",(0,d.jsx)(s.h2,{id:"\u4e8b\u4ef6\u5faa\u73af",children:"\u4e8b\u4ef6\u5faa\u73af"}),"\n",(0,d.jsxs)(s.p,{children:["\u6bcf\u4e2a\u670d\u52a1\u8fdb\u7a0b\u7684 main\uff08\u5982 ",(0,d.jsx)(s.code,{children:"src/lobbysvr/service/app/lobbysvr_main.cpp"}),"\uff09\u6267\u884c\uff1a"]}),"\n",(0,d.jsxs)(s.ol,{children:["\n",(0,d.jsxs)(s.li,{children:["\u6784\u9020 ",(0,d.jsx)(s.code,{children:"atfw::atapp::app"}),"\uff1b"]}),"\n",(0,d.jsxs)(s.li,{children:[(0,d.jsx)(s.code,{children:"logic_server_setup_common"}),"\uff08",(0,d.jsx)(s.code,{children:"src/server_frame/logic/logic_server_setup.cpp"}),"\uff09\u88c5\u914d\u516c\u5171\u6a21\u5757\u3001\u4e8b\u4ef6\u56de\u8c03\u4e0e\r\nservice discovery \u7d22\u5f15\uff1b"]}),"\n",(0,d.jsxs)(s.li,{children:[(0,d.jsx)(s.code,{children:"app.add_module(cs_msg_dispatcher::me(), ss_msg_dispatcher::me(), db_msg_dispatcher::me(), \u4e1a\u52a1module...)"}),"\uff1b"]}),"\n",(0,d.jsxs)(s.li,{children:[(0,d.jsx)(s.code,{children:"app.run(uv_default_loop(), argc, argv, nullptr)"}),"\u3002"]}),"\n"]}),"\n",(0,d.jsxs)(s.p,{children:["\u6240\u6709 atbus \u6536\u53d1\u3001Redis \u56de\u590d\u3001\u5b9a\u65f6\u5668\u3001DNS \u67e5\u8be2\u90fd\u5728\u8fd9\u4e00\u4e2a libuv loop \u4e0a\u56de\u8c03\uff1b\u8017\u65f6\u64cd\u4f5c\u4e00\u5f8b\u5c01\u88c5\u4e3a\u534f\u7a0b task\uff0c\r\n",(0,d.jsx)(s.code,{children:"co_await"}),"\uff08\u6216 libcopp \u7b49\u4ef7\u5b8f\uff09\u6302\u8d77\u7b49\u5f85\uff0c\u7531 dispatcher \u6309 ",(0,d.jsx)(s.code,{children:"task_id + sequence"})," \u5524\u9192\u3002"]}),"\n",(0,d.jsx)(s.h2,{id:"\u5ba2\u6237\u7aef\u6d88\u606f\u6d41cs",children:"\u5ba2\u6237\u7aef\u6d88\u606f\u6d41\uff08CS\uff09"}),"\n",(0,d.jsx)(s.mermaid,{value:"sequenceDiagram\r\n    participant C as Client\r\n    participant GW as atgateway\r\n    participant CS as cs_msg_dispatcher\r\n    participant TA as task_action(CS)\r\n    participant DB as db_msg_dispatcher/Redis\r\n\r\n    C->>GW: CSMsg\uff08\u52a0\u5bc6\uff09\r\n    GW->>CS: gateway::server_message kPost\r\n    CS->>TA: \u89e3\u5305 CSMsg\uff0c\u521b\u5efa task action\r\n    TA->>DB: RPC_AWAIT rpc::db::*\r\n    DB--\x3e>TA: Redis \u56de\u590d\uff08\u5524\u9192 task\uff09\r\n    TA->>CS: \u6253\u5305\u54cd\u5e94\r\n    CS->>GW: session \u4e0b\u884c\r\n    GW->>C: \u54cd\u5e94"}),"\n",(0,d.jsxs)(s.p,{children:[(0,d.jsx)(s.code,{children:"cs_msg_dispatcher"})," \u5904\u7406 ",(0,d.jsx)(s.code,{children:"gateway::server_message"})," \u56db\u7c7b\uff1a",(0,d.jsx)(s.code,{children:"kAddSession"}),"\uff08\u521b\u5efa session\uff09\u3001",(0,d.jsx)(s.code,{children:"kPost"}),"\uff08\u4e0a\u884c\u6d88\u606f\uff0c\r\n\u542f\u52a8 CS task action\uff09\u3001",(0,d.jsx)(s.code,{children:"kRemoveSession"}),"\uff08\u767b\u51fa\uff09\u3001",(0,d.jsx)(s.code,{children:"kSetRouterRsp"}),"\u3002\u4e0b\u884c\u7531 ",(0,d.jsx)(s.code,{children:"session::send_msg_to_client"})," /\r\n",(0,d.jsx)(s.code,{children:"cs_msg_dispatcher::send_data / broadcast_data / send_kickoff / send_set_router"})," \u56de\u4f20 atgateway\u3002"]}),"\n",(0,d.jsx)(s.h2,{id:"\u670d\u52a1\u95f4\u6d88\u606f\u6d41ss",children:"\u670d\u52a1\u95f4\u6d88\u606f\u6d41\uff08SS\uff09"}),"\n",(0,d.jsxs)(s.ul,{children:["\n",(0,d.jsxs)(s.li,{children:["\u8c03\u7528\u7aef\u4ee3\u7801\u7531 ",(0,d.jsx)(s.code,{children:"rpc_call_api_for_ss.*.mako"})," \u751f\u6210\uff1a\u7ec4\u88c5 ",(0,d.jsx)(s.code,{children:"SSMsg"})," \u2192 ",(0,d.jsx)(s.code,{children:"ss_msg_dispatcher::send_to_proc"}),"\uff08\u6309\r\nbus id / \u540d\u5b57 / discovery node\uff09\u2192 ",(0,d.jsx)(s.code,{children:"app::send_message"})," \u2192 atbus\uff1b\u8de8\u670d\u52a1\u7ec4\u53ef\u7ecf atproxy \u8f6c\u53d1\u3002"]}),"\n",(0,d.jsx)(s.li,{children:"\u652f\u6301 unary / stream / no-wait / broadcast / metadata / user / router \u53d8\u4f53\uff1bbroadcast \u53ef\u6309 type\u3001zone\u3001\r\nmetadata \u7d22\u5f15\u5bfb\u5740\u3002"}),"\n",(0,d.jsxs)(s.li,{children:["\u54cd\u5e94\u7ecf ",(0,d.jsx)(s.code,{children:"internal::wait_and_unpack_ss_response"})," \u6309 ",(0,d.jsx)(s.code,{children:"destination_task_id + sequence"})," \u5524\u9192\u7b49\u5f85\u4e2d\u7684 task\u3002"]}),"\n",(0,d.jsxs)(s.li,{children:[(0,d.jsx)(s.code,{children:"ss_msg_dispatcher"})," \u5185\u5d4c DNS lookup\uff08",(0,d.jsx)(s.code,{children:"uv_getaddrinfo"})," + ",(0,d.jsx)(s.code,{children:"custom_resume"}),"\uff09\uff0c\u4f9b\u6309\u9700\u89e3\u6790\u5bf9\u7aef\u5730\u5740\u3002"]}),"\n"]}),"\n",(0,d.jsx)(s.h2,{id:"\u6570\u636e\u5e93\u6d88\u606f\u6d41",children:"\u6570\u636e\u5e93\u6d88\u606f\u6d41"}),"\n",(0,d.jsxs)(s.p,{children:[(0,d.jsx)(s.code,{children:"db_msg_dispatcher"})," \u57fa\u4e8e hiredis-happ \u7ba1\u7406 Redis cluster \u4e0e raw\uff08sentinel\uff09\u53cc\u901a\u9053\u8fde\u
163a5\uff0c\u652f\u6301 SCRIPT LOAD \u4e0e\r\n\u5185\u5d4c Lua\uff08CAS\u3001KL \u7d22\u5f15\u88c1\u526a\uff09\uff1b\u56de\u590d\u89e3\u5305\u540e\u5524\u9192\u5bf9\u5e94 task\u3002\u8be6\u89c1",(0,d.jsx)(s.a,{href:"data-layer",children:"\u6570\u636e\u5c42"}),"\u3002"]}),"\n",(0,d.jsx)(s.h2,{id:"\u6302\u8d77\u5524\u9192\u539f\u8bed",children:"\u6302\u8d77/\u5524\u9192\u539f\u8bed"}),"\n",(0,d.jsxs)(s.table,{children:[(0,d.jsx)(s.thead,{children:(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.th,{children:"\u539f\u8bed"}),(0,d.jsx)(s.th,{children:"\u4f4d\u7f6e"}),(0,d.jsx)(s.th,{children:"\u7528\u9014"})]})}),(0,d.jsxs)(s.tbody,{children:[(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"rpc::wait"})}),(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"rpc/rpc_utils.h"})}),(0,d.jsx)(s.td,{children:"\u7b49\u5f85 SSMsg / db_message\uff08\u53ef\u5e26 timeout\uff09\uff0c\u652f\u6301\u591a waiter"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"rpc::custom_wait"})," / ",(0,d.jsx)(s.code,{children:"rpc::custom_resume"})]}),(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"rpc/rpc_utils.h"})}),(0,d.jsx)(s.td,{children:"\u6309 type \u5730\u5740 + sequence \u6302\u8d77/\u5524\u9192\uff08DNS\u3001router \u7b49\u81ea\u5b9a\u4e49\u5524\u9192\uff09"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"rpc::async_invoke"})}),(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"rpc/rpc_async_invoke.h"})}),(0,d.jsx)(s.td,{children:"\u628a\u4efb\u610f callable \u5305\u88c5\u4e3a\u771f\u5b9e task \u542f\u52a8"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"RPC_AWAIT_*"})," / ",(0,d.jsx)(s.code,{children:"RPC_RETURN_*"})]}),(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"rpc/rpc_common_types.h"})}),(0,d.jsx)(s.td,{children:"\u5c4f\u853d std-coroutine / libcopp \u53cc\u5b9e\u73b0\u5dee\u5f02\u7684\u5b8f"})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,d.jsx)(s,{...e,children:(0,d.jsx)(o,{...e})}):o(e)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.