配置 #
YAML配置文件可以配置您的Nakama服务器运行方式的多项内容。您可以在不指定配置文件而是依赖默认配置的情况下运行Nakama。
指定配置文件 #
您可以使用--config
标志在运行时指定配置文件。
|
|
如果您正在通过Docker-Compose运行Nakama,则需要在机器中绑定一个文件夹,使其在Docker中可用。在文档中查看配置在Docker上运行的Nakama。
服务器端口 #
Nakama系统非常灵活。您可以通过gRPC, HTTP, Websockets和rUDP与服务器交换数据。由于这种灵活性,Nakama需要4个端口可用于绑定到:
- 在端口7350上绑定到HTTP API服务器可以在配置中更改端口。
- 在7351端口上绑定到HTTP API服务器,这个服务器启动嵌入式开发人员控制台。可以在配置中更改端口。
- 在端口7349上绑定到gRPC API服务器。根据API服务器端口选择端口。
- 在7348端口上绑定到gRPC API服务器,该服务器启动嵌入式控制台。根据API服务器端口选择端口。
共同属性 #
在大多数环境中以及在将Nakama部署到实时生产环境之前,需要更改部分配置属性,例如,您必须更改**socket.server_key
,session.encryption_key
** 和**runtime.http_key
**的值。
配置的完整列表见页面底部。
Parameter | Description |
---|---|
name | Nakama 节点名称(必须是唯一的)- 默认将为“nakama”。 |
data_dir | Nakama 要存储数据(包括日志)的可写文件夹的绝对路径。默认值是 Nakama 启动时的工作目录。 |
runtime.path | 要扫描和加载的模块的路径。默认值为“data_dir/modules”。 |
database.address | 要连接的数据库节点列表。应该遵循“username:password@address:port/dbname”的形式(“postgres://”协议会自动追加到路径中)。默认值为“root@localhost:26257”。 |
socket.server_key | 用于与服务器建立连接的服务器密钥。默认值为“defaultkey”。 |
runtime.http_key | 密钥用于保护服务器的运行时 HTTP 调用。默认值为“defaulthttpkey”。 |
session.encryption_key | 用于生成客户令牌的加密密钥。默认值为“defaultencryptionkey”。 |
session.token_expiry_sec | 会话令牌过期时间(以秒为单位)。默认值为 60。 |
session.refresh_encryption_key | 用于生成会话刷新令牌的加密密钥。默认值为“defaultrefreshencryptionkey”。 |
session.refresh_token_expiry_sec | 刷新令牌过期时间(以秒为单位)。默认值为 3600。 |
服务器配置 #
Nakama有各种配置选项,可以充分用于各种用例和部署环境。
Nakama为所有配置选项提供了合理的值,因此您可能仅需要覆盖选项的子集。您也可以仅设置您自己的配置文件,并通过命令行标志覆盖配置文件中的值。例如,覆盖运行时路径:
|
|
对于非特殊字段,将使用默认值。查看服务器命令行页面,获取关于如何覆盖标志的更多信息。
Parameter | Flag | Description |
---|---|---|
name | name | Nakama 节点名称(必须是唯一的)- 将被默认为“nakama”。日志文件中也使用这个名称。 |
data_dir | data_dir | Nakama 将存储数据(包括日志)的可写文件夹的绝对路径。默认值是 Nakama 启动时的工作目录。 |
shutdown_grace_sec | shutdown_grace_sec | 关闭前等待服务器完成工作的最大秒数。如果为 0,服务器将在收到终止信号时立即关闭。默认值为“0”。 |
集群 #
本节介绍如何连接各个节点形成集群。
以下配置选项仅在Nakama服务器的Nakama企业版中可用。
Nakama的设计使其在生产环境中作为高度可用的集群运行。如果您正在运行Nakama企业版,可以在您的开发机器上本地启动集群。在生产中,您可以使用Nakama企业版或我们的Heroic Cloud服务。
Parameter | Flag | Description |
---|---|---|
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。 |
local_priority | cluster.local_priority | 设置为“true”时,尽可能使用本地资源。 |
work_factor_interval_ms | cluster.work_factor_interval_ms | 工作因素同步操作的更新频率。 |
控制台 #
本节定义了与嵌入式开发人员控制台相关的配置。
Parameter | Flag | Description |
---|---|---|
address | console.address | 控制台通信监听接口的 IP 地址。默认所有地址/接口都处于监听状态。 |
max_message_size_bytes | console.max_message_size_bytes | 每条消息允许从客户端套接字中读取的最大数据量(以字节为单位)。 |
idle_timeout_ms | console.idle_timeout_ms | 启用存活时,等待下一个请求的最大时间量(以毫秒为单位)。 |
password | console.password | 嵌入式控制台的密码。默认值为“password”。 |
port | console.port | 接受嵌入式控制台的连接、使所有接口处于监听状态的端口。默认值为 7351。 |
read_timeout_ms | console.read_timeout_ms | 读取整个请求的最大时间量(以毫秒为单位)。 |
signing_key | console.signing_key | 用于签署控制台会话令牌的密钥。 |
token_expiry_sec | console.token_expiry_sec | 令牌过期时间(以秒为单位)。默认值为 86400。 |
username | console.username | 嵌入式控制台的用户名。默认值为“admin”。 |
write_timeout_ms | console.write_timeout_ms | 响应写入超时之前等待的最大时间量(以毫秒为单位)。 |
数据库 #
Nakama需要一个可用的CockroachDB服务器。Nakama 在CockroachDB数据库中创建并管理自己的名为nakama
的数据库。
Parameter | Flag | Description |
---|---|---|
address | database.address | 要连接的数据库节点列表。应该遵循“username:password@address:port/dbname”的形式(“postgres://”协议会自动追加到路径中)。默认值为“root@localhost:26257”。 |
conn_max_lifetime_ms | database.conn_max_lifetime_ms | 终止数据库连接并创建新的连接之前,重新使用该数据库连接的时间(以毫秒为单位)。默认值为 0(无限期)。 |
max_idle_conns | database.max_idle_conns | 允许开放但未使用的数据库连接的最大数量。默认值为 100。 |
max_open_conns | database.max_open_conns | 允许开放的数据库连接的最大数量。默认值为 0(无限制)。 |
dns_scan_interval_sec | database.dns_scan_interval_sec | 查找数据库主机名称的 DNS 解析变更的扫描间隔秒数。默认值为 60。 |
您可以通过命令将多个数据库地址传递给Nakama,例如:
|
|
IAP(应用程序内的购买行为) #
Nakama可以通过连接到各个商店并保存有效购买的分类账来验证应用程序内的购买行为。这有助于防止常见的使用有效收据进行应用程序内购买行为重放攻击,也有助于根据需要恢复用户账户的购买行为。
Apple #
Apple应用程序内购买行为的配置
Parameter | Flag | Description |
---|---|---|
shared_password | apple.shared_password | 您的应用程序的共享密码。 |
Google #
Google应用程序内购买行为的配置
Parameter | Flag | Description |
---|---|---|
client_email | google.client_email | 服务帐户客户电子邮件值。 |
private_key | google.private_key | 服务帐户私钥值。 |
华为 #
Parameter | Flag | Description |
---|---|---|
public_key | huawei.public_key | 华为 IAP 存储 Base64 编码格式公钥。 |
client_id | huawei.client_id | 华为 OAuth 客户端密钥。 |
client_secret | huawei.client_secret | 华为 OAuth 应用程序客户端密钥。 |
排行榜 #
您可以更改与排行榜和锦标赛系统相关的配置选项。
Parameter | Flag | Description |
---|---|---|
blacklist_rank_cache | leaderboard.blacklist_rank_cache | 禁用具有匹配排行榜名称的排行榜的排名缓存。使用“*”完全禁用排名缓存,留空则启用排名缓存。 |
callback_queue_size | leaderboard.callback_queue_size | 排序到期/重置/结束调用的排行榜和锦标赛回调队列的大小。默认值为 65536。 |
callback_queue_workers | leaderboard.callback_queue_workers | 并发处理排行榜和锦标赛回调的工作线程的数量。默认值为 8。 |
记录器 #
Nakama生成JSON格式的日志,以便各种系统可以与日志交互。默认将这些日志写入到标准输出(控制台)中。
Parameter | Flag | Description |
---|---|---|
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 | 日志文件轮替前的最大大小(以 MB 为单位)。默认值为 100 MB。默认值为 100。 |
rotation | logger.rotation | 轮替日志文件。默认值为 false。 |
stdout | logger.stdout | 将日志重定向为控制台标准输出。日志文件将不再使用。默认值为“true”。 |
无论logger.stdout
字段的值为多少,都会始终将标准的启动日志消息打印到控制台。
匹配 #
您可以更改与授权多玩家运行时相关的配置选项。
Parameter | Flag | Description |
---|---|---|
call_queue_size | match.call_queue_size | 权威匹配缓冲对匹配处理程序回调的调用进行排序,确保无重叠。本参数指这种权威匹配缓冲的大小。默认值为 128。 |
deferred_queue_size | match.deferred_queue_size | 权威匹配缓冲在每个循环执行结束前保留延迟的消息广播。本参数指这种权威匹配缓冲的大小。默认值为 128。 |
input_queue_size | match.input_queue_size | 在客户端消息可以在下一个循环周期中被处理之前,权威匹配缓冲存储这些客户端消息。本参数指这种权威匹配缓冲的大小。默认值为 128。 |
join_attempt_queue_size | match.join_attempt_queue_size | 权威匹配缓冲限制正在进行的连接尝试数量,这种权威匹配缓冲的大小。默认值为 128。 |
join_marker_deadline_ms | match.join_marker_deadline_ms | 客户端权威匹配连接等待匹配处理程序确认连接的截止时间(以毫秒为单位)。默认值为 5000。 |
label_update_interval_ms | match.label_update_interval_ms | 匹配标签更新间隔时间(以毫秒为单位)。默认值为 1000。 |
max_empty_sec | match.max_empty_sec | 允许权威匹配在被停止前连续空出的最大秒数。0 表示无最大值。默认值为 0。 |
指标 #
Nakama生成指标信息。可以将该信息导出到Prometheus。
由于指标包含敏感的服务器信息,需要对指标导出进行保护。
运行时 #
与运行时引擎相关的选项。
Parameter | Flag | Description |
---|---|---|
call_stack_size | runtime.call_stack_size | (Deprecated) 每次运行时实例调用栈的大小。默认值为 128。 |
env | runtime.env | 作为环境变量显示给运行时脚本的键-值属性列表。 |
event_queue_size | runtime.event_queue_size | 事件队列缓冲的大小。默认值为 65536。 |
event_queue_workers | runtime.event_queue_workers | 用于并发处理事件的工作线程的数量。默认值为 8。 |
http_key | runtime.http_key | 用于验证 HTTP 运行时调用的密钥。默认值为“defaultkey”。 |
js_entrypoint | runtime.js_entrypoint | 指定捆绑的 JavaScript 运行时源代码的位置。 |
js_max_count | runtime.js_max_count | 要分配的 JavaScript 运行时实例的最大数量。默认值为 32。 |
js_min_count | runtime.js_min_count | 要分配的 JavaScript 运行时实例的最小数量。默认值为 16。 |
js_read_only_globals | runtime.js_read_only_globals | 启用后,将所有的 JavaScript 运行时全局标记为只读,以减少内存占用。默认值为 true。 |
lua_call_stack_size | runtime.lua_call_stack_size | 每次运行时实例调用栈的大小。默认值为 128。 |
lua_max_count | runtime.lua_max_count | 要分配的 Lua 运行时实例的最大数量。默认值为 48。 |
lua_min_count | runtime.lua_min_count | 要分配的 Lua 运行时实例的最小数量。默认值为 16。 |
lua_read_only_globals | runtime.lua_read_only_globals | 启用后,将所有的 Lua 运行时全局表标记为只读,以减少内存占用。默认值为 true。 |
lua_api_stacktrace | runtime.lua_api_stacktrace | 在 API 响应中添加 Lua 栈追踪。默认值为 true。 |
lua_registry_size | runtime.lua_registry_size | 每次 Lua 运行时实例注册表的大小。默认值为 512。 |
max_count | runtime.max_count | (Deprecated) 要分配的运行时实例的最大数量。默认值为 256。 |
min_count | runtime.min_count | (Deprecated) 要分配的运行时实例的最小数量。默认值为 16。 |
path | runtime.path | 服务器在启动时要扫描和加载的模块的路径。默认值为“data_dir/modules”。 |
read_only_globals | runtime.read_only_globals | (Deprecated) 启用后,将所有的运行时全局表标记为只读,以减少内存占用。默认值为 true。 |
registry_size | runtime.registry_size | (Deprecated) 每次运行时实例注册表的大小。默认值为 512。 |
运行时环境是一个键值对。它们由=
字符分隔:
|
|
会话 #
您可以更改与每个用户相关的配置选项,例如用于创建令牌的加密键。
Parameter | Flag | Description |
---|---|---|
encryption_key | session.encryption_key | 用于生成客户令牌的加密密钥。默认值为“defaultencryptionkey”。 |
token_expiry_sec | session.token_expiry_sec | 令牌过期时间(以秒为单位)。默认值为 60。 |
refresh_encryption_key | session.refresh_encryption_key | 用于生成会话刷新令牌的加密密钥。默认值为“defaultrefreshencryptionkey”。 |
refresh_token_expiry_sec | session.refresh_token_expiry_sec | 刷新令牌过期时间(以秒为单位)。默认值为 3600。 |
single_socket | session.single_socket | 每个用户仅允许有一个套接字,较旧的会话将被断开连接。默认值为“false”。 |
single_match | session.single_match | 每个用户只允许有一个匹配,较旧的匹配会被断开。需要“single_socket”才能启用。默认值为“false”。 |
社交 #
Nakama可以连接到多种社交网络,以便获取用户信息。它也可以作为通知中心,传递和保持通知。
Apple #
与Apple iOS/iPadOS应用程序相关的配置。
Parameter | Flag | Description |
---|---|---|
bundle_id | social.apple.bundle_id | Apple 登录包标识符。 |
Steam #
配置Steam网络设置。Facebook, Google和GameCenter不需要任何服务器设置。
Parameter | Flag | Description |
---|---|---|
app_id | social.steam.app_id | Steam 应用程序标识符。 |
publisher_key | social.steam.publisher_key | Steam 发布者密钥。 |
Facebook即时游戏 #
Facebook即时游戏相关的配置。
Parameter | Flag | Description |
---|---|---|
app_secret | social.facebook_instant_game.app_secret | Facebook 即时应用程序密钥。 |
app_id | social.facebook_limited_login.app_id | Facebook 有限登录应用程序标识符。 |
套接字 #
与服务器和客户端之间的连接套接字和传输协议相关的选项。
Parameter | Flag | Description |
---|---|---|
address | socket.address | 客户端通信监听接口的 IP 地址。默认所有地址/接口都处于监听状态。 |
idle_timeout_ms | socket.idle_timeout_ms | 启用存活时,等待下一个请求的最大时间量(以毫秒为单位)。用于 HTTP 连接。默认值为 60000。较大的值只建议用于本地调试,绝不建议用于生产。 |
max_message_size_bytes | socket.max_message_size_bytes | 每条消息允许从客户端套接字中读取的最大数据量(以字节为单位)。用于实时连接。默认值为 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 | 通信监听的网络协议。可能的值为:“tcp”同时用于 IPv4 和 IPv6、“tcp4”仅用于 IPv4 或“tcp6”仅用于 IPv6。默认值为“tcp”。 |
read_buffer_size_bytes | socket.read_buffer_size_bytes | 预先分配的套接字读取缓冲的大小(以字节为单位)。默认值为 4096。 |
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_buffer_size_bytes | socket.write_buffer_size_bytes | 预先分配的套接字写入缓冲的大小(以字节为单位)。默认值为 4096。 |
write_timeout_ms | socket.write_timeout_ms | 响应写入超时之前等待的最大时间量(以毫秒为单位)。用于 HTTP 连接。默认值为 10000。 |
write_wait_ms | socket.write_wait_ms | 写入数据时,等待客户端确认的时间(以毫秒为单位)。用于实时连接。默认值为 5000。 |
跟踪器 #
您可以更改与会话跟踪相关的配置选项。
Parameter | Flag | Description |
---|---|---|
event_queue_size | tracker.event_queue_size | 跟踪器存在事件缓冲的大小。如果预计服务器会在短时间内产生大量的存在事件,则增加。默认值为 1024。 |
以下配置选项仅在Nakama服务器的Nakama企业版中可用
Nakama的设计使其在生产环境中作为高度可用的集群运行。如果您正在运行Nakama企业版,您可以在您的开发机器上本地启动集群。在生产中,您可以使用Nakama企业版或我们的Heroic Cloud服务。
Parameter | Flag | Description |
---|---|---|
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。 |
配对程序 #
您可以更改与配对相关的配置选项。
Parameter | Flag | Description |
---|---|---|
max_tickets | matchmaker.max_tickets | 每次会话或群组允许的最大并发匹配门票的数量。默认值为 3。 |
interval_sec | matchmaker.interval_sec | 匹配程序试图形成匹配的速度(以秒为单位)。默认值为 15。 |
max_intervals | matchmaker.max_intervals | 在允许最小计数之前,匹配程序在最大玩家计数下尝试查找匹配项的间隔数。默认值为 2。 |
rev_precision | matchmaker.rev_precision | 反向匹配精度,即如果玩家A与玩家B匹配,匹配者也将检查玩家B是否与玩家A匹配。 |
rev_threshold | matchmaker.rev_threshold | 在退回到单向匹配之前,允许反向匹配的匹配器间隔数。默认为1。 |
示例文件 #
您可以使用整个文件或仅使用配置的子集。
|
|