跳至正文
版本:最新版 - a1.148.0 ⚖️

服务器配置

配置服务器所需了解的一切!

服务器配置文件

服务器配置文件 Config.toml 在服务器首次启动时会自动生成。 在服务器加载后,该文件将始终被正确的模板覆盖。

提示

nanos world 配置文件使用 TOML(Tom's Obvious, Minimal Language)语法,请参考 https://github.com/toml-lang/toml 了解更多信息和语法。

Config.toml
loading...

设置细节

设置描述
name服务器名称
description服务器描述
max_players允许加入的最大玩家数量
password连接服务器所需的密码
ip服务器 IP。 我们推荐保持空白
port服务器主端口和 HTTP 端口 (UDP/TCP)
query_port服务器查询端口 (UDP)
announce是否在服务器列表中公开展示
max_tick_rate服务器刻(Hz)。 服务器每秒将进行多少次刻。 我们推荐保持为 30
max_sync_rate最大 Actor 同步率(Hz)。 Actor 的位置/旋转/速度每秒将同步多少次,受限于 max_tick_rate
max_send_rate每个客户端的服务器网络发送速率(KB/s)。 限制每个连接玩家的带宽。 推荐设置为满足需求的最低值,因为当有网络连接较差的玩家时,过高的速率可能会对服务器性能产生负面影响
max_file_transfer_rate更改每个客户端的最大文件传输速率
distance_optimization设置距离优化级别,通过减少远距离 Actor 的同步来优化网络占用
log_level要输出的日志级别
game_mode要加载的 game-mode 包 - 一次只能加载一个游戏模式。
loading_screen要加载的 loading-screen 包 - 一次只能加载一个加载屏幕。
packages要加载的脚本
map要加载的 map 地图包
assets强制加载的额外资产
token用于通过 CLI 授权下载的服务器令牌
banned_ids被封禁的 nanos 账户 ID 列表

徽标图片

可以在服务器列表中显示自定义图片。 为此,请在服务器可执行文件旁边添加一个名为 Server.jpg 的文件,并配上你想要的徽标。 推荐尺寸为 300x150

提示

你可以向 --logo 参数传递一个 JPG 图片的 URL,以便从网络下载并使用图片,而无需将其物理放置在文件夹中。

备注

服务器徽标功能仅适用于专用服务器。

地图与关卡

地图(或关卡)在服务器的配置文件中定义,当玩家在客户端加入服务器时,该地图将被加载。

要配置地图,请参考包指南来创建一个指向正确资产的地图包。

nanos world(目前)自带 4 张内置地图:default-blank-mapdefault-empty-mapdefault-ocean-mapdefault-testing-map,这些地图可以在你的服务器中直接使用,无需下载任何包/资产包。

服务器控制台

内置命令

命令参数描述
chat\<message>发送一条聊天消息
clear清空控制台
kick\<player_id> \<reason>根据 ID 踢出玩家
map\<map_path>重新加载所有包并在新地图中重新连接玩家
restart重启服务器,重新加载所有包并重新连接玩家
stop停止服务器
players列出所有已连接的玩家
password\<new_password>更改服务器密码
profiling\<0-1>启用/禁用用于调试的性能分析日志
log_level\<1-3>更改日志级别
max_send_rate\<128-16384>更改每个客户端的最大发送速率
max_file_transfer_rate\<128-max_send_rate>更改每个客户端的最大文件传输速率
distance_optimization\<0-9>设置距离优化级别
package run\<package_name> \<lua_code>在一个包中运行代码
package reload all重新加载所有包并重启 Lua 虚拟机
package reload\<package_names...>重新加载包
package unload\<package_names...>卸载包
package load\<package_names...>加载包
package hotreload\<package_names...>重新加载所有文件,但保持内存当前状态不变

自定义命令

也可以定义自定义命令,为此请参考 Console.RegisterCommand()

命令行参数

可以使用命令行参数来覆盖服务器配置。

参数值类型描述
--namestring服务器名称
--descriptionstring服务器描述
--logostring服务器徽标(在内存中下载图片)
--passwordstring服务器密码
--ipstring服务器 IP
--playtestflag使用游戏测试 APPID 启动服务器(这样你就可以使用游戏测试权限进行游玩)
--mapstring要加载的地图
--port1024-65535服务器端口
--query_port1024-65535服务器查询端口(必须与服务器端口不同)
--announce0 or 1是否在主列表中公布
--game_modestring服务器游戏模式
--loading_screenstring服务器加载屏幕
--packagesstring list服务器包
--assetsstring list服务器资产
--tokenstring服务器授权令牌
--max_players1-999最大允许玩家数
--dedicated_server0 or 1是否作为专用服务器或点对点启动
--async_log0 or 1是否使用异步或同步日志(异步提供更好的性能)

默认为 1
--log_level1, 2 or 3是否使用普通 1、调试 2 或详细 3 日志
--custom_settingstoml string以 toml 格式传递给脚本的一组自定义设置
--compression0-9设置在某些网络操作中使用的压缩级别

0 禁用压缩,1 最快,9 最慢但压缩率最高
--saveflag是否将传递的参数保存到 Config.toml 中
--profilingflag启用用于调试的性能分析日志
--auto_downloadflag如果需要,自动从资源库下载包和资产
--use_vault_assets_leanflag仅从资源库下载资产包的 .toml 配置文件
--log_show_threadflag显示每条输出日志当前运行的线程
--max_tick_rate15-120设置服务器最大刻速率(Hz,即每秒刻数)
--max_sync_rate1-30设置最大 Actor 同步率(Hz,即每秒同步次数),自然受限于 max_tick_rate
--max_send_rate128-16384设置每个客户端的服务器最大发送速率(KB/s)
--max_file_transfer_rate128-16384设置每个客户端的服务器最大文件传输速率(KB/s)

该值必须小于 max_send_rate
--distance_optimization0-9设置距离优化级别,通过减少远距离 Actor 的同步来优化网络利用率

0 表示禁用,4 是一个不错的折中值,9 最激进
--thread_pool_count0-any设置初始化用于执行异步操作的线程数(例如来自 HTTPDatabaseFile 的操作)

默认为 8(或 CPU 核心数),设置为 0 将禁用线程池并始终为每个异步操作启动一个新线程
--enable_unsafe_libsflag允许在服务器端执行 os.executeos.renameos.removeos.exitos.getenvos.tmpnameos.setlocaledofileloadfile 以及所有 io.* 方法

警告:这些方法可能会允许恶意操作在你的服务器上运行,请确保你完全了解自己在做什么
提示

Flag 值类型不需要任何参数,只需像 --parameter 这样传递参数即可。

单行命令服务器配置

利用命令行参数和命令行界面 (CLI),还可以自动化整个服务器安装过程,示例如下:

安装所有需要的包(这也会自动安装所需的资产),然后以配置好的所有选项启动服务器:

./NanosWorldServer.exe --cli install package sandbox battlefield-kill-ui ts-fireworks-tools
./NanosWorldServer.exe --name "nanos world Amazing Sandbox" --description "Awesome Sandbox Server" --map "nanos-world::TestingMap" --game_mode "sandbox" --packages "battlefield-kill-ui,ts-fireworks-tools" --port 7777 --query_port 7778 --max_players 32 --logo "https://i.imgur.com/vnB8CB5.jpg"

或者,直接启动服务器并传递所有配置,如果需要,它会自动下载包和资产:

./NanosWorldServer.exe --name "nanos world Amazing Sandbox" --description "Awesome Sandbox Server" --map "nanos-world::TestingMap" --game_mode "sandbox" --packages "battlefield-kill-ui,ts-fireworks-tools" --port 7777 --query_port 7778 --max_players 32 --auto_download 1 --logo "https://i.imgur.com/vnB8CB5.jpg"

常见的控制台消息和错误

Server Tick too/extreme high! Verify the server performance! Server got stuck for Xms...

这意味着服务器卡顿了 X 毫秒。 警告(黄色)并不需要过度担心,但如果出现过多 红色 的消息,则可能意味着你的服务器基础设施不够好,或者你的脚本代码优化不足。

通常服务器以每秒 33 刻的频率运行(或在 Config.toml 中配置的值),服务器在此频率下进行无限循环,并在该循环内执行所有服务器操作,例如接收和发送网络数据包、触发 lua 事件、执行函数或回调等。

如果单个刻耗时超过 33 毫秒,就会出现此警告。

提示

在某些共享 VPS 中,由于 VPS 处理其机器伸缩的方式,此警告可能会更频繁地出现。有时服务商可能会认为你的 VPS 处于“闲置”状态(因为 nanos world 服务器占用的 CPU 极低)并可能会降低你的处理能力,从而导致出现此警告。

Lua Stack Error: Should be X, is Y...

这是一个内部错误,本不应该发生。 这些是在我们的 Lua 脚本实现周围设置的保护机制,以防止更坏的事情发生。 如果出现此错误,意味着发生了实现上的漏洞。 请立即与开发者联系,并在可能的情况下提供重现方法!

...Was it supposed to happen?

这些 FATAL 错误通常不应该发生,如果你遇到任何此类错误,请告诉我们。