-
Notifications
You must be signed in to change notification settings - Fork 201
Node
Bruce edited this page Sep 21, 2025
·
1 revision
moon进程称为Node, 每个Node通过组合不同功能的服务来组成特定类型的进程(游戏逻辑服, 跨服战场),不同的Node组成游戏服务器集群(Cluster)。使用以下命令就创建一个Node:
moon script.lua [args...]script.lua被称为启动脚本,同时它也是初始化第一个服务的脚本。第一个服务被称为bootstrap服务,它有一些特殊性,通常用来创建和管理其它唯一服务, 和控制节点进程的退出流程,将会在服务部分详细介绍。
moon启动后会把工作目录切换到script.lua所在的路径。
启动脚本可以分为默认启动和配置初始化参数, 这里先介绍默认启动的方式,配置初始化参数会在节点间通信部分详细介绍。如下示例就是按默认启动方式创建一个节点, 把下面代码保存成文件node.lua, 放在moon可执行文件同级目录, 使用moon node.lua a b c运行.
local moon = require("moon")
local arg = moon.args()
moon.async(function ()
moon.sleep(100)
print("hello world: ", table.concat(arg, " "))
moon.quit()
end)输出
2023-07-23 17:40:04.922 | :01000001 | INFO | [WORKER 1] new service [bootstrap]
2023-07-23 17:40:04.922 | 42432 | INFO | WORKER-20 START
2023-07-23 17:40:05.025 | :01000001 | INFO | hello world: a b c (node.lua:5)
2023-07-23 17:40:05.025 | :01000001 | INFO | [WORKER 1] destroy service [bootstrap]主要API
--- 注册进程退出信号处理函数, 需要在处理函数中主动调用`moon.quit`, 否则服务不会退出。
--- 可以开启新的协程执行异步逻辑: 如服务器安全关闭流程, 等待服务按指定顺序关闭, 保存数据等。
--- **对于唯一服务一般需要注册此函数来处理退出流程,或者使用`moon.kill`强制关闭**
---@param callback fun()
function moon.shutdown(callback)
cb_shutdown = callback
end ---触发进程退出流程
moon.exit(exit_code)- 如果
exit_code<0, Node进程会直接退出,不会触发moon.shutdown回调。
local moon = require("moon")
print("hello world")
moon.exit(-1)
moon.shutdown(function ()
print("shutdown") ---不会打印这一行
moon.quit() --退出
end)- 如果
exit_code>=0, 会给Node进程内所有服务发送shutdown消息, 等没有服务存活时, 进程才会退出。可以注册moon.shutdown回调自定义退出逻辑。唯一服务moon.shutdown回调的默认行为是空,所以需要主动调用moon.quit()来退出, 通常是在bootstrap服务中控制唯一服务的退出顺序, 对于大部分游戏服务器,唯一服务的退出顺序是很重要的。 对于普通服务moon.shutdown回调的默认行为是调用moon.quit(), 如果要自己管理普通服务的退出,可以覆盖掉moon.shutdown的默认行为。
local moon = require("moon")
print("hello world")
moon.exit(0)
moon.shutdown(function ()
print("shutdown") ---会打印这一行
moon.quit() --退出
end)-
bootstrap服务初始化失败时会自动调用moon.exit(-1) -
main函数会返回对应的exit_code退出码, 方便进程管理工具判断是否启动成功