YAML 配置文件配置 Nakama 服务器运行方式的许多方面。您可以在不指定配置文件的情况下运行 Nakama(而是依赖默认设置)。
指定配置文件
您可以在运行时使用 --config 标志指定配置文件。
代码语言:javascript复制nakama --config my-special-config.yml
如果您通过 Docker-Compose 运行 Nakama,则需要在计算机中绑定一个文件夹,以便该文件夹在 Docker 中可用。请遵循本指南来设置文件夹绑定。
服务器端口
Nakama 是一个非常灵活的系统。你可以通过 gRPC, HTTP, Websockets 和 rUDP 与服务器交换数据。由于这种灵活性,Nakama 需要 4 个端口可用来绑定:
- HTTP API 服务器位于端口 7350 上。可以在配置中更改端口。
- HTTP API 服务器在端口 7351 上为嵌入式开发人员控制台提供动力。可以在配置中更改端口。
- gRPC API 服务器位于端口 7349 上。端口是根据 API 服务器端口选择的。
- 嵌入式控制台的 gRPC API 服务器位于端口 7348 上。端口是根据 API 服务器端口选择的。
我们将在未来的版本中减少端口要求。
公共属性
在大多数环境中,都有一些配置属性需要更改。完整的配置列表在页面底部。
代码语言:javascript复制Nakama 节点名称(必须唯一)- 默认为 nakama。
"生产设置" 在将 Nakama 部署到实时生产环境之前,必须更改 socket.server_key
,session.encryption_key
和 runtime.http_key
的值。
服务器配置
Nakama 具有各种配置选项,以使其尽可能灵活地适用于各种用例和部署环境。
Nakama 为所有配置选项提供了健全的默认值,因此您只需要覆盖选项的子集。您还可以设置自己的配置文件,并通过命令行标志覆盖配置文件中的值。例如,要覆盖运行时路径:
代码语言:javascript复制nakama --runtime.path /tmp/my-modules
如果字段没有指定,将使用默认值。有关如何重写标志的更多信息,请参阅服务器命令行页面。
"覆盖配置" 可以从配置文件中将每个配置选项设置为命令行标志,也可以将两者都设置为命令行参数优先,并且命令行参数将覆盖配置值。
参数 | Flag | 描述 |
---|---|---|
name | name | Nakama 节点名称(必须唯一)- 默认为 nakama。日志文件中也使用该名称。 |
data_dir | data_dir | Nakama 将在其中存储数据(包括日志)的可写文件夹的绝对路径。默认值为启动 Nakama 的工作目录。 |
shutdown_grace_sec | shutdown_grace_sec | 关闭服务器之前等待服务器完成工作的最大秒数。如果为 0,则服务器在收到终止信号时将立即关闭。默认值为 0。 |
集群(Cluster)
本节将配置节点应该如何相互连接以形成集群。
"仅 Nakama 企业版":以下配置选项仅在 Nakama 服务器的 Nakama 企业版本中可用
代码语言:javascript复制Nakama 旨在作为高可用性集群在生产中运行。如果您正在运行 Nakama Enterprise,则可以在开发计算机上本地启动集群。在生产中,您可以使用 [Nakama Enterprise](https://heroiclabs.com/nakama-enterprise) 或我们的[托管云服务](https://heroiclabs.com/managed-cloud)。
参数 | Flag | 描述 |
---|---|---|
gossip_bindaddr | cluster.gossip_bindaddr | 绑定 Nakama 进行发现的接口地址。默认情况下,在所有接口上侦听。 |
gossip_bindport | cluster.gossip_bindport | 绑定 Nakama 进行发现的端口号。默认值为 7352 |
join | cluster.join | 要连接的其他 Nakama 节点的主机名和端口的列表。 |
max_message_size_bytes | cluster.max_message_size_bytes | 每个消息允许在 Nakama 节点之间发送的最大字节数。默认值是 4194304。 |
rpc_port | cluster.rpc_port | 用于在 Nakama 节点之间发送数据的端口号。默认值是 7353。 |
控制台(Console)
本节定义了与嵌入式开发人员控制台相关的配置。
参数 | Flag | 描述 |
---|---|---|
address | console.address | 用于侦听控制台流量的接口的IP地址。默认监听所有可用的地址/接口。 |
max_message_size_bytes | console.max_message_size_bytes | 每条消息允许从客户端 socket 读取的最大字节数。 |
idle_timeout_ms | console.idle_timeout_ms | 启用 keep-alive 时等待下一个请求的最大时间(以毫秒为单位)。 |
password | console.password | 嵌入式控制台的密码。默认设置是“password”。 |
port | console.port | 用于接收嵌入式控制台的连接的端口,监听所有接口。默认值是7351。 |
read_timeout_ms | console.read_timeout_ms | 读取整个请求的最长时间(以毫秒为单位)。 |
signing_key | console.signing_key | 用于对控制台会话令牌签名的 key。 |
token_expiry_sec | console.token_expiry_sec | 令牌几秒内到期。默认的 86400。 |
username | console.username | 嵌入式控制台的用户名。默认设置是 “admin”。 |
write_timeout_ms | console.write_timeout_ms | 超时写入响应之前的最大持续时间(以毫秒为单位)。 |
数据库(Database)
Nakama 需要一个可用的 CockroachDB 服务器实例。Nakama 在 CockroachDB 数据库中创建并管理自己的名为 Nakama
的数据库。
参数 | Flag | 描述 |
---|---|---|
address | database.address | 要连接的数据库节点列表。它应该遵循 username:password@address:port/dbname 的形式( postgres:// 协议自动附加到路径)。默认为 root@localhost:26257。 |
conn_max_lifetime_ms | database.conn_max_lifetime_ms | 在连接被终止和创建新连接之前重用数据库连接的时间(以毫秒为单位)。默认值为0(不定值 indefinite)。 |
max_idle_conns | database.max_idle_conns | 允许打开但未使用的数据库连接的最大数量。默认值为100。 |
max_open_conns | database.max_open_conns | 允许打开数据库连接的最大数量。默认值为 0(no limit 无限制)。 |
"数据库地址":您可以通过命令传递多个数据库地址给 Nakama,如:
代码语言:javascript复制 nakama --database.address "root@db1:26257" --database.address "root@db2:26257"
排行榜(Leaderboard)
您可以更改与排行榜和比赛系统相关的配置选项。
参数 | Flag | 描述 |
---|---|---|
blacklist_rank_cache | leaderboard.blacklist_rank_cache | 禁用与排行榜名称匹配的排行榜的等级缓存。 |
callback_queue_size | leaderboard.callback_queue_size | 排序终止(expiry)/重置(reset)/结束(end)调用的排行榜和比赛回调队列的大小。默认 65536。 |
callback_queue_workers | leaderboard.callback_queue_workers | 用于并发处理排行榜和比赛回调的 worker 数。默认的8。 |
"禁用等级缓存":要完全禁用等级缓存,请使用 *
,否则留空以启用等级缓存。
日志(Logger)
Nakama以JSON格式生成日志,因此各种系统可以与这些日志进行交互。默认情况下,它们被写入标准输出(控制台)。
参数 | Flag | 描述 |
---|---|---|
compress | logger.compress | 这决定了是否应该使用 gzip 压缩已旋转的日志文件。 |
file | logger.file | 将输出记录到文件中(如果设置了“stdout”)。确保目录和文件是可写的。 |
format | logger.format | 设置日志输出格式。可以是'JSON' 或 'Stackdriver'。默认是 'JSON'。 |
level | logger.level | 产生的最小日志级别。值是debug,info,warn 和 error。默认值为 info。 |
local_time | logger.local_time | 这可以确定格式化备份文件中的时间戳所用的时间是否为计算机的本地时间。默认为使用 UTC 时间。 |
max_age | logger.max_age | 根据文件名中编码的时间戳保留旧日志文件的最大天数。默认情况下不根据年龄删除旧日志文件。 |
max_backups | logger.max_backups | 要保留的旧日志文件的最大数量。默认情况下是保留所有旧的日志文件(尽管 max_age 可能仍然会导致它们被删除)。 |
max_size | logger.max_size | 在日志文件被旋转之前,以兆字节为单位的最大大小。它默认为 100 兆字节。默认是 100。 |
rotation | logger.rotation | 旋转日志文件。默认是 false。 |
stdout | logger.stdout | 将日志重定向到控制台标准输出。日志文件将不再使用。默认为 true。 |
无论 logger.stdout
字段的值如何,标准的启动日志消息将始终打印到控制台。
Match
可以更改与授权多人游戏运行时相关的配置选项。
参数 | Flag | 描述 |
---|---|---|
call_queue_size | match.call_queue_size | authoritative match 缓冲区的大小,顺序调用以匹配处理程序回调以确保不重叠。默认的128。 |
deferred_queue_size | match.deferred_queue_size | authoritative match 缓冲区的大小,用于保存延迟的消息广播,直到每个循环执行结束为止。默认值 128。 |
input_queue_size | match.input_queue_size | 存储客户端消息的 authoritative match 缓冲区的大小,直到下一个 tick 可以处理它们为止。默认值 128。 |
join_attempt_queue_size | match.join_attempt_queue_size | authoritative match 缓冲区的大小,该缓冲区限制正在进行的连接尝试的次数。默认值 128。 |
join_marker_deadline_ms | match.join_marker_deadline_ms | 客户端 authoritative match 联接的最后期限(以毫秒为单位)将等待匹配处理程序确认联接。默认值 5000。 |
max_empty_sec | match.max_empty_sec | authoritative matches 被停止之前允许为空的最大连续秒数。0 表示没有最大值。默认值 0。 |
指标(Metrics)
Nakama 会生成指标信息。此信息可以导出到 Stackdriver 或 Prometheus。
参数 | Flag | 描述 |
---|---|---|
namespace | metrics.namespace | Prometheus 的命名空间或 Stackdriver 度量的前缀。它将始终前置节点名。默认值为空。 |
prometheus_port | metrics.prometheus_port | Port 暴露 Prometheus,默认值为 “0”,该值禁止 Prometheus 导出。 |
reporting_freq_sec | metrics.reporting_freq_sec | 指标输出的频率。默认为60秒。 |
stackdriver_projectid | metrics.stackdriver_projectid | 这是服务器要将统计数据上传到的 Stackdriver 项目的标识符。设置此选项可使指标标准导出到 Stackdriver。 |
确保指标输出受到保护,因为它们包含敏感的服务器信息。
运行时(Runtime)
与基于 lua 的运行时引擎相关的选项。
参数 | Flag | 描述 |
---|---|---|
call_stack_size | runtime.call_stack_size | 每个运行时实例的调用堆栈的大小。默认的128。 |
env | runtime.env | 作为环境变量公开给运行时脚本的 Key-Value 属性列表。 |
event_queue_size | runtime.event_queue_size | 事件队列缓冲区的大小。默认值 65536。 |
event_queue_workers | runtime.event_queue_workers | 用于事件的并行处理的 worker 数。默认值 8。 |
http_key | runtime.http_key | 用于验证 HTTP 运行时调用的密钥。默认值为 defaultkey。 |
max_count | runtime.max_count | 要分配的最大运行时实例数。默认值 256。 |
min_count | runtime.min_count | 要分配的最小运行时实例数。默认值 16。 |
path | runtime.path | 服务器在启动时扫描和加载的模块的路径。默认值为 data_dir/modules。 |
registry_size | runtime.registry_size | 每个运行时实例的注册表的大小。默认值 512 |
"重要":您必须先更改 http_key
,然后才能使用您的应用程序!
"Runtime env value":运行时环境是一个 key-value 对。它们之间用 =
字符分隔,如下所示:
nakama --runtime.env "key=value" --runtime.env "key2=value2" --runtime.env "key3=valuecanhave=sign"
会话(Session)
您可以更改与每个用户会话相关的配置选项,例如用于创建令牌的加密密钥。
参数 | Flag | 描述 |
---|---|---|
encryption_key | session.encryption_key | 用于生成客户端令牌的加密密钥。默认值是 defaultencryptionkey。 |
token_expiry_sec | session.token_expiry_sec | 令牌几秒内到期。默认值是 60。 |
"Important":您必须先更改 encryption_key
,然后才能使用您的应用程序!
社交(Social)
Nakama 可以连接到各种社交网络以获取用户信息。它还可以充当通知中心,用于传递和保留通知。
Steam
配置 Steam 网络设置。Facebook,Google 和 GameCenter 不需要任何服务器设置。
参数 | Flag | 描述 |
---|---|---|
app_id | steam.app_id | Steam App ID. |
publisher_key | steam.publisher_key | Steam Publisher 密钥。 |
Facebook 即时游戏
与 Facebook Instant Games 相关的配置。
参数 | Flag | 描述 |
---|---|---|
app_secret | facebook_instant_game.app_secret | Facebook 即时应用 Secret。 |
Socket
与服务器和客户端之间的连接 socket 和传输协议有关的选项。
参数 | Flag | 描述 |
---|---|---|
address | socket.address | 用于侦听客户端流量的接口的IP地址。默认监听所有可用的地址/接口。 |
idle_timeout_ms | socket.idle_timeout_ms | 启用 keep-alive 时等待下一个请求的最大时间(以毫秒为单位)。用于 HTTP 连接。默认值是 60000。 |
max_message_size_bytes | socket.max_message_size_bytes | 每条消息允许从客户端 socket 读取的最大字节数。用于实时连接。默认值是 4096。 |
max_request_size_bytes | socket.max_request_size_bytes | 每次请求允许从客户端读取的最大字节数。用于 gRPC 和 HTTP 连接。默认值是 4096。 |
outgoing_queue_size | socket.outgoing_queue_size | 等待发送到客户端的最大消息数。如果超过此值,则认为客户端太慢,将断开连接。处理实时连接时使用。默认值是 16。 |
ping_backoff_threshold | socket.ping_backoff_threshold | 在单个 ping 周期内从客户端接收到的最小消息数,将延迟到下一个 ping 周期发送 ping,以避免在正常活动的连接上发送不必要的 ping。默认值是 20。 |
ping_period_ms | socket.ping_period_ms | 客户端 ping 消息之间等待的时间(以毫秒为单位)。这个值必须小于 pong_wait_ms。用于实时连接。默认值为15000。 |
pong_wait_ms | socket.pong_wait_ms | 发送 ping 后从客户端等待 pong 消息的时间(以毫秒为单位)。用于实时连接。默认值是 25000。 |
port | socket.port | 端口,用于接收来自客户端的连接,监听所有接口。默认值是 7350。 |
protocol | socket.protocol | 用于监听流量的网络协议。可能的值是 IPv4 和 IPv6 的 tcp 值,仅 IPv4 的 tcp4 值或仅 IPv6 的 tcp6 值。默认为tcp。 |
read_timeout_ms | socket.read_timeout_ms | 读取整个请求的最长时间(以毫秒为单位)。用于 HTTP 连接。默认值是 10000。 |
server_key | socket.server_key | 用于建立与服务器连接的服务器密钥。默认值为 defaultkey。 |
ssl_certificate | socket.ssl_certificate | 如果您想让服务器直接使用 SSL,则指向证书文件的路径。还必须提供 ssl_private_key。不推荐用于生产使用。 |
ssl_private_key | socket.ssl_private_key | 如果您希望服务器直接使用 SSL,则使用私钥文件的路径。还必须提供 ssl_certificate。不推荐用于生产使用。 |
write_timeout_ms | socket.write_timeout_ms | 超时写入响应之前的最长持续时间(以毫秒为单位)。用于 HTTP 连接。默认值是 10000。 |
write_wait_ms | socket.write_wait_ms | 写入数据时等待客户端 ack 的时间(毫秒)。用于实时连接。默认值为 5000。 |
"Important":您必须先更改 server_key
才能使用您的应用程序!
追踪器(Tracker)
您可以更改与会话跟踪相关的配置选项。
参数 | Flag | 描述 |
---|---|---|
event_queue_size | tracker.event_queue_size | 跟踪器存在事件(presence event)缓冲区的大小。如果预期服务器在短时间内生成大量存在事件,则增加。默认值是1024。 |
"仅 Nakama 企业版":以下配置选项仅在 Nakama 服务器的 Nakama 企业版本中可用
代码语言:javascript复制Nakama 旨在作为高可用性集群在生产中运行。如果您正在运行 Nakama Enterprise,则可以在开发计算机上本地启动集群。在生产中,您可以使用 [Nakama Enterprise](https://heroiclabs.com/nakama-enterprise) 或我们的[托管云服务](https://heroiclabs.com/managed-cloud)。
参数 | Flag | 描述 |
---|---|---|
broadcast_period_ms | tracker.broadcast_period_ms | 跟踪器状态复制广播到每个集群节点之间的时间(以毫秒为单位)。默认值为1500。 |
clock_sample_periods | tracker.clock_sample_periods | 如果没有按预期接收到广播,则在出现传输之前将从群集节点请求广播的数量。默认值是2。 |
max_delta_sizes | tracker.max_delta_sizes | 用于将状态数据的最小子集广播到集群节点的状态快照的增量数量和每个增量的最大状态快照计数。默认值为 100、1000 和 10000。 |
max_silent_periods | tracker.max_silent_periods | 在考虑集群节点出现故障之前,错过的最大广播数。预设值为10。 |
permdown_period_ms | tracker.permdown_period_ms | 自上次广播到集群节点存在之前的时间(以毫秒为单位),将被视为永久关闭并且将被删除。默认值为 1200000 |
示例文件
您可以使用整个文件,也可以仅使用配置的一部分。
代码语言:javascript复制name: nakama-node-1
data_dir: "./data/"
logger:
stdout: false
level: "warn"
file: "/tmp/path/to/logfile.log"
metrics:
reporting_freq_sec: 60
namespace: ""
stackdriver_projectid: ""
prometheus_port: 0
database:
address:
- "root@localhost:26257"
conn_max_lifetime_ms: 0
max_open_conns: 0
max_idle_conns: 100
runtime:
env:
- "example_apikey=example_apivalue"
- "encryptionkey=afefa==e332*u13=971mldq"
path: "/tmp/modules/folders"
http_key: "defaulthttpkey"
socket:
server_key: "defaultkey"
port: 7350
max_message_size_bytes: 4096 # bytes
read_timeout_ms: 10000
write_timeout_ms: 10000
idle_timeout_ms: 60000
write_wait_ms: 5000
pong_wait_ms: 10000
ping_period_ms: 8000 # Must be less than pong_wait_ms
outgoing_queue_size: 16
session:
encryption_key: "defaultencryptionkey"
token_expiry_sec: 60
social:
steam:
publisher_key: ""
app_id: 0
console:
port: 7351
username: "admin"
password: "password"
cluster:
join:
- "10.0.0.2:7352"
- "10.0.0.3:7352"
gossip_bindaddr: "0.0.0.0"
gossip_bindport: 7352
rpc_port: 7353
中文在线文档
https://nakama-docs.hacker-linner.com/
Nakama Server 中文在线文档,持续更新中……