{"id":695,"date":"2025-12-09T17:32:39","date_gmt":"2025-12-09T09:32:39","guid":{"rendered":"https:\/\/www.52runoob.com\/?p=695"},"modified":"2025-12-09T17:32:39","modified_gmt":"2025-12-09T09:32:39","slug":"skynet-dispatch-%e4%bd%bf%e7%94%a8%e7%a4%ba%e4%be%8b%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/www.52runoob.com\/index.php\/2025\/12\/09\/skynet-dispatch-%e4%bd%bf%e7%94%a8%e7%a4%ba%e4%be%8b%e8%af%a6%e8%a7%a3\/","title":{"rendered":"skynet.dispatch\u00a0\u4f7f\u7528\u793a\u4f8b\u8be6\u89e3"},"content":{"rendered":"\n<p>\u4e0b\u9762\u7ed9\u4f60\u6574\u7406\u4e00\u4efd <strong>\u300aSkynet dispatch \u4f7f\u7528\u793a\u4f8b\u8be6\u89e3\uff08\u8d85\u5168\uff09\u300b<\/strong>\uff0c\u4ece\u6982\u5ff5\u3001\u539f\u7406\u5230\u5b9e\u6218\u793a\u4f8b\uff0c\u8ba9\u4f60\u5f7b\u5e95\u5f04\u61c2\u670d\u52a1\u7aef\u6d88\u606f\u5904\u7406\u7684\u6838\u5fc3\u673a\u5236\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u4e00\u3001skynet.dispatch \u662f\u4ec0\u4e48\uff1f<\/strong><\/h1>\n\n\n\n<p>\u5728 Skynet \u6846\u67b6\u4e2d\uff0c\u6240\u6709 <strong>\u670d\u52a1\u4e4b\u95f4\u7684\u6d88\u606f\u901a\u4fe1<\/strong>\uff0c\u90fd\u4f9d\u8d56\u4e8e dispatch \u6765\u5904\u7406\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4f5c\u7528<\/strong>\uff1a\u6ce8\u518c\u6d88\u606f\u5904\u7406\u51fd\u6570\uff0c\u51b3\u5b9a\u670d\u52a1\u6536\u5230\u6d88\u606f\u540e\u5982\u4f55\u5904\u7406<\/li>\n\n\n\n<li><strong>\u5178\u578b\u7528\u6cd5<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nskynet.dispatch(&quot;lua&quot;, function(session, source, cmd, ...)\n    -- \u5904\u7406\u6d88\u606f\u903b\u8f91\nend)\n\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7b2c\u4e00\u4e2a\u53c2\u6570<\/strong>\uff1a\u6d88\u606f\u7c7b\u578b\uff08\u5e38\u7528 <code>\"lua\"<\/code>\u3001<code>\"text\"<\/code> \u7b49\uff09<\/li>\n\n\n\n<li><strong>\u7b2c\u4e8c\u4e2a\u53c2\u6570<\/strong>\uff1a\u56de\u8c03\u51fd\u6570\uff0c\u53c2\u6570\u901a\u5e38\u662f\uff1a\n<ul class=\"wp-block-list\">\n<li><code>session<\/code>\uff1a\u4f1a\u8bdd ID\uff0c\u7528\u4e8e\u8fd4\u56de\u7ed3\u679c<\/li>\n\n\n\n<li><code>source<\/code>\uff1a\u53d1\u9001\u6d88\u606f\u7684\u670d\u52a1\u5730\u5740<\/li>\n\n\n\n<li><code>...<\/code>\uff1a\u6d88\u606f\u5185\u5bb9\uff08\u7531\u53d1\u9001\u65b9\u4f20\u9012\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u4e8c\u3001dispatch \u53c2\u6570\u8be6\u89e3<\/strong><\/h1>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nskynet.dispatch(proto, func)\n\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u53c2\u6570<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>proto<\/td><td>\u6d88\u606f\u7c7b\u578b\uff0c\u4f8b\u5982 <code>\"lua\"<\/code>\u3001<code>\"text\"<\/code>\u3001\u81ea\u5b9a\u4e49\u534f\u8bae<\/td><\/tr><tr><td>func<\/td><td>\u56de\u8c03\u51fd\u6570\uff0c\u5f62\u5f0f\uff1a<code>function(session, source, ...)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>session = 0<\/strong>\uff1a\u8868\u793a\u6d88\u606f\u662f\u5355\u5411\u7684\uff08send \u53d1\u9001\uff09<\/li>\n\n\n\n<li><strong>session > 0<\/strong>\uff1a\u8868\u793a\u6d88\u606f\u53ef\u56de\u590d\uff08call \/ rawcall\uff09<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u4e09\u3001dispatch \u4f7f\u7528\u573a\u666f<\/strong><\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5904\u7406\u666e\u901a RPC \u8bf7\u6c42<\/strong><\/li>\n\n\n\n<li><strong>\u5904\u7406\u5f02\u6b65\u6d88\u606f \/ \u901a\u77e5<\/strong><\/li>\n\n\n\n<li><strong>\u81ea\u5b9a\u4e49\u534f\u8bae\u6d88\u606f<\/strong><\/li>\n\n\n\n<li><strong>\u5185\u90e8\u670d\u52a1\u901a\u4fe1<\/strong><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u56db\u3001dispatch \u57fa\u672c\u793a\u4f8b<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u670d\u52a1\u7aef user.lua<\/strong><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nlocal skynet = require &quot;skynet&quot;\n\nlocal CMD = {}\n\nfunction CMD.getName(uid)\n    return &quot;User_&quot; .. uid\nend\n\nfunction CMD.add(a, b)\n    return a + b\nend\n\n-- \u6ce8\u518c\u6d88\u606f\u5904\u7406\nskynet.start(function()\n    skynet.dispatch(&quot;lua&quot;, function(session, source, cmd, ...)\n        local f = CMD&#x5B;cmd]\n        if f then\n            skynet.ret(skynet.pack(f(...))) -- \u8fd4\u56de\u7ed3\u679c\u7ed9\u8c03\u7528\u65b9\n        else\n            skynet.error(&quot;Unknown command:&quot;, cmd)\n        end\n    end)\nend)\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\"><strong>\u5ba2\u6237\u7aef\u8c03\u7528<\/strong><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nlocal skynet = require &quot;skynet&quot;\n\nlocal name = skynet.call(&quot;.user&quot;, &quot;lua&quot;, &quot;getName&quot;, 1001)\nprint(name)  -- \u8f93\u51fa\uff1aUser_1001\n\nlocal sum = skynet.call(&quot;.user&quot;, &quot;lua&quot;, &quot;add&quot;, 10, 20)\nprint(sum)   -- \u8f93\u51fa\uff1a30\n\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6838\u5fc3<\/strong>\uff1adispatch \u6ce8\u518c\u4e86 <code>\"lua\"<\/code> \u7c7b\u578b\u7684\u6d88\u606f\u5904\u7406<\/li>\n\n\n\n<li><strong>call \u81ea\u52a8\u6302\u8d77\u534f\u7a0b<\/strong>\uff0cdispatch \u8fd4\u56de\u7ed3\u679c\u540e\u534f\u7a0b\u6062\u590d<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u4e94\u3001dispatch \u5f02\u6b65\u6d88\u606f\u793a\u4f8b<\/strong><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528 <code>skynet.send<\/code> \u53d1\u9001\u901a\u77e5<\/li>\n\n\n\n<li>session = 0\uff0c\u4e0d\u9700\u8981\u8fd4\u56de\u503c<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u5ba2\u6237\u7aef\u53d1\u9001<\/strong><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nskynet.send(&quot;.user&quot;, &quot;lua&quot;, &quot;notify&quot;, &quot;Hello World&quot;)\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\"><strong>\u670d\u52a1\u7aef dispatch<\/strong><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nskynet.dispatch(&quot;lua&quot;, function(session, source, cmd, msg)\n    if cmd == &quot;notify&quot; then\n        skynet.info(&quot;Received message:&quot;, msg)\n    end\n    -- session = 0\uff0c\u4e0d\u8fd4\u56de\nend)\n\n<\/pre><\/div>\n\n\n<p>\u7279\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f02\u6b65\u6d88\u606f\u4e0d\u4f1a\u963b\u585e\u8c03\u7528\u65b9<\/li>\n\n\n\n<li>dispatch \u53ef\u4ee5\u540c\u65f6\u5904\u7406\u591a\u79cd\u6d88\u606f\u7c7b\u578b<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u516d\u3001dispatch \u591a\u534f\u8bae\u793a\u4f8b<\/strong><\/h1>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n-- \u5904\u7406 lua \u6d88\u606f\nskynet.dispatch(&quot;lua&quot;, function(session, source, cmd, ...)\n    print(&quot;Lua message:&quot;, cmd, ...)\nend)\n\n-- \u5904\u7406 text \u6d88\u606f\nskynet.dispatch(&quot;text&quot;, function(session, source, msg)\n    print(&quot;Text message:&quot;, msg)\nend)\n\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>\u9002\u7528\u4e8e\u670d\u52a1\u540c\u65f6\u5904\u7406 RPC\u3001\u65e5\u5fd7\u901a\u77e5\u3001\u6587\u672c\u547d\u4ee4\u7b49<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u4e03\u3001dispatch + rawcall \u793a\u4f8b<\/strong><\/h1>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nskynet.dispatch(&quot;lua&quot;, function(session, source, cmd, ...)\n    if cmd == &quot;getName&quot; then\n        local reply = &quot;User_&quot; .. ...\n        skynet.ret(skynet.pack(reply))  -- \u53ef\u7528\u4e8e rawcall \u6216 call\n    end\nend)\n\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>rawcall \u53d1\u9001\u6d88\u606f\u65f6\u4e5f\u4f1a\u88ab dispatch \u62e6\u622a<\/li>\n\n\n\n<li>\u624b\u52a8\u5904\u7406\u8fd4\u56de\u503c<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u516b\u3001dispatch \u9ad8\u7ea7\u7528\u6cd5<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. \u4f7f\u7528 CMD \u8868\u96c6\u4e2d\u7ba1\u7406\u547d\u4ee4<\/strong><\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nlocal CMD = {}\n\nfunction CMD.hello()\n    return &quot;Hello Skynet&quot;\nend\n\nfunction CMD.add(a, b)\n    return a + b\nend\n\nskynet.dispatch(&quot;lua&quot;, function(session, source, cmd, ...)\n    local f = CMD&#x5B;cmd]\n    if f then\n        skynet.ret(skynet.pack(f(...)))\n    else\n        skynet.error(&quot;Unknown cmd:&quot;, cmd)\n    end\nend)\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>2. \u9632\u6b62\u5e76\u53d1\u51b2\u7a81<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u4e8e\u9700\u8981\u987a\u5e8f\u6267\u884c\u7684\u64cd\u4f5c\uff0c\u53ef\u4ee5\u4f7f\u7528 <code>skynet.queue<\/code>\uff1a<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nlocal skynet = require &quot;skynet&quot;\nlocal queue = require &quot;skynet.queue&quot;\nlocal q = queue()\n\nskynet.dispatch(&quot;lua&quot;, function(session, source, cmd, ...)\n    q(function()\n        -- \u987a\u5e8f\u5904\u7406 cmd\n        skynet.ret(skynet.pack(CMD&#x5B;cmd](...)))\n    end)\nend)\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u4e5d\u3001dispatch \u6ce8\u610f\u4e8b\u9879<\/strong><\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>session \u7ba1\u7406<\/strong>\n<ul class=\"wp-block-list\">\n<li>call \/ rawcall \u6d88\u606f\u7684 session > 0<\/li>\n\n\n\n<li>send \u6d88\u606f session = 0\uff0c\u4e0d\u8fd4\u56de<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u8fd4\u56de\u503c\u5904\u7406<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5fc5\u987b\u4f7f\u7528 <code>skynet.ret(skynet.pack(...))<\/code> \u8fd4\u56de\u7ed3\u679c<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5e76\u53d1\u5904\u7406<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u9ed8\u8ba4 dispatch \u662f\u5e76\u53d1\u5904\u7406\u7684<\/li>\n\n\n\n<li>\u5bf9\u5171\u4eab\u8d44\u6e90\u64cd\u4f5c\u5efa\u8bae\u7528 skynet.queue \u6216\u81ea\u5b9a\u4e49\u9501<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u591a\u534f\u8bae\u5171\u5b58<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u53ef\u4ee5\u540c\u65f6\u6ce8\u518c <code>\"lua\"<\/code>\u3001<code>\"text\"<\/code> \u7b49\u591a\u79cd\u534f\u8bae<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u9519\u8bef\u6355\u83b7<\/strong>\n<ul class=\"wp-block-list\">\n<li>dispatch \u5185\u90e8\u5f02\u5e38\u4e0d\u4f1a\u5f71\u54cd Skynet \u6846\u67b6\uff0c\u4f46\u4f1a\u6253\u5370\u65e5\u5fd7<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u5341\u3001dispatch \u6838\u5fc3\u603b\u7ed3<\/strong><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4f5c\u7528<\/strong>\uff1a\u6ce8\u518c\u6d88\u606f\u5904\u7406\u51fd\u6570\uff0c\u662f Skynet \u670d\u52a1\u7aef\u5904\u7406\u6d88\u606f\u7684\u6838\u5fc3<\/li>\n\n\n\n<li><strong>\u7528\u6cd5<\/strong>\uff1a<code>skynet.dispatch(proto, func)<\/code><\/li>\n\n\n\n<li><strong>\u5173\u952e\u70b9<\/strong>\uff1a\n<ol class=\"wp-block-list\">\n<li>proto \u5bf9\u5e94\u6d88\u606f\u7c7b\u578b<\/li>\n\n\n\n<li>func \u53c2\u6570 <code>(session, source, ...)<\/code><\/li>\n\n\n\n<li>call \u6d88\u606f\u9700\u8981 <code>skynet.ret<\/code> \u8fd4\u56de<\/li>\n\n\n\n<li>send \u6d88\u606f session = 0\uff0c\u65e0\u8fd4\u56de<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>\u5178\u578b\u573a\u666f<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>RPC \u8bf7\u6c42\u5904\u7406\uff08call \/ rawcall\uff09<\/li>\n\n\n\n<li>\u5f02\u6b65\u901a\u77e5\u5904\u7406\uff08send\uff09<\/li>\n\n\n\n<li>\u65e5\u5fd7\u3001\u5fc3\u8df3\u3001\u72b6\u6001\u540c\u6b65\u7b49\u5185\u90e8\u901a\u4fe1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0b\u9762\u7ed9\u4f60\u6574\u7406\u4e00\u4efd \u300aSkynet dispatch \u4f7f\u7528\u793a\u4f8b\u8be6\u89e3\uff08\u8d85\u5168\uff09\u300b\uff0c\u4ece\u6982&#8230; <a class=\"more-link\" href=\"https:\/\/www.52runoob.com\/index.php\/2025\/12\/09\/skynet-dispatch-%e4%bd%bf%e7%94%a8%e7%a4%ba%e4%be%8b%e8%af%a6%e8%a7%a3\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-695","post","type-post","status-publish","format-standard","hentry","category-2"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/comments?post=695"}],"version-history":[{"count":1,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/695\/revisions"}],"predecessor-version":[{"id":696,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/695\/revisions\/696"}],"wp:attachment":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/media?parent=695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/categories?post=695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/tags?post=695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}