服务器配置
配置服务器所需了解的一切!
服务器配置文件
服务器配置文件 Config.toml 在服务器首次启动时会自动生成。 在服务器加载后,该文件将始终被正确的模板覆盖。
nanos world 配置文件使用 TOML(Tom's Obvious, Minimal Language)语法,请参考 https://github.com/toml-lang/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-map、default-empty-map、default-ocean-map 和 default-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()。
命令行参数
可以使用命令行参数来覆盖服务器配置。
| 参数 | 值类型 | 描述 |
|---|---|---|
--name | string | 服务器名称 |
--description | string | 服务器描述 |
--logo | string | 服务器徽标(在内存中下载图片) |
--password | string | 服务器密码 |
--ip | string | 服务器 IP |
--playtest | flag | 使用游戏测试 APPID 启动服务器(这样你就可以使用游戏测试权限进行游玩) |
--map | string | 要加载的地图 |
--port | 1024-65535 | 服务器端口 |
--query_port | 1024-65535 | 服务器查询端口(必须与服务器端口不同) |
--announce | 0 or 1 | 是否在主列表中公布 |
--game_mode | string | 服务器游戏模式 |
--loading_screen | string | 服务器加载屏幕 |
--packages | string list | 服务器包 |
--assets | string list | 服务器资产 |
--token | string | 服务器授权令牌 |
--max_players | 1-999 | 最大允许玩家数 |
--dedicated_server | 0 or 1 | 是否作为专用服务器或点对点启动 |
--async_log | 0 or 1 | 是否使用异步或同步日志(异步提供更好的性能) 默认为 1 |
--log_level | 1, 2 or 3 | 是否使用普通 1、调试 2 或详细 3 日志 |
--custom_settings | toml string | 以 toml 格式传递给脚本的一组自定义设置 |
--compression | 0-9 | 设置在某些网络操作中使用的压缩级别0 禁用压缩,1 最快,9 最慢但压缩率最高 |
--save | flag | 是否将传递的参数保存到 Config.toml 中 |
--profiling | flag | 启用用于调试的性能分析日志 |
--auto_download | flag | 如果需要,自动从资源库下载包和资产 |
--use_vault_assets_lean | flag | 仅从资源库下载资产包的 .toml 配置文件 |
--log_show_thread | flag | 显示每条输出日志当前运行的线程 |
--max_tick_rate | 15-120 | 设置服务器最大刻速率(Hz,即每秒刻数) |
--max_sync_rate | 1-30 | 设置最大 Actor 同步率(Hz,即每秒同步次数),自然受限于 max_tick_rate |
--max_send_rate | 128-16384 | 设置每个客户端的服务器最大发送速率(KB/s) |
--max_file_transfer_rate | 128-16384 | 设置每个客户端的服务器最大文件传输速率(KB/s) 该值必须小于 max_send_rate |
--distance_optimization | 0-9 | 设置距离优化级别,通过减少远距离 Actor 的同步来优化网络利用率0 表示禁用,4 是一个不错的折中值,9 最激进 |
--thread_pool_count | 0-any | 设置初始化用于执行异步操作的线程数(例如来自 HTTP、Database、File 的操作) 默认为 8(或 CPU 核心数),设置为 0 将禁用线程池并始终为每个异步操作启动一个新线程 |
--enable_unsafe_libs | flag | 允许在服务器端执行 os.execute、os.rename、os.remove、os.exit、os.getenv、os.tmpname、os.setlocale、dofile、loadfile 以及所有 io.* 方法警告:这些方法可能会允许恶意操作在你的服务器上运行,请确保你完全了解自己在做什么 |
Flag 值类型不需要任何参数,只需像 --parameter 这样传递参数即可。
单行命令服务器配置
利用命令行参数和命令行界面 (CLI),还可以自动化整个服务器安装过程,示例如下:
- Windows
- Linux
安装所有需要的包(这也会自动安装所需的资产),然后以配置好的所有选项启动服务器:
./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"
安装所有需要的包(这也会自动安装所需的资产),然后以配置好的所有选项启动服务器:
./NanosWorldServer.sh --cli install package sandbox battlefield-kill-ui ts-fireworks-tools
./NanosWorldServer.sh --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.sh --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 错误通常不应该发生,如果你遇到任何此类错误,请告诉我们。