Nakama Server,服务器配置

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
日志服务 SLS,月写入数据量 50GB 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: Nakama Server,服务器配置

YAML 配置文件配置 Nakama 服务器运行方式的许多方面。您可以在不指定配置文件的情况下运行 Nakama(而是依赖默认设置)。


指定配置文件



您可以在运行时使用 --config 标志指定配置文件。


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 服务器端口选择的。


我们将在未来的版本中减少端口要求。


公共属性



在大多数环境中,都有一些配置属性需要更改。完整的配置列表在页面底部。


参数 描述
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 用于生成客户端 token 的加密密钥。默认值为 defaultencryptionkey
session.token_expiry_sec 会话 token 将在几秒内到期。默认值是 60。


"生产设置" 在将 Nakama 部署到实时生产环境之前,必须更改 socket.server_keysession.encryption_keyruntime.http_key 的值。


服务器配置



Nakama 具有各种配置选项,以使其尽可能灵活地适用于各种用例和部署环境。

Nakama 为所有配置选项提供了健全的默认值,因此您只需要覆盖选项的子集。您还可以设置自己的配置文件,并通过命令行标志覆盖配置文件中的值。例如,要覆盖运行时路径:


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 企业版本中可用


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,如:


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 产生的最小日志级别。值是debuginfowarnerror。默认值为 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 企业版本中可用


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


示例文件


您可以使用整个文件,也可以仅使用配置的一部分。


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
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
5月前
|
弹性计算 运维 监控
slb后端服务器组(Backend Server Group)关联
阿里云SLB的后端服务器组提供逻辑分组、精细化路由、端口隔离、权重分配与会话保持等功能,便于资源管理、流量控制和故障隔离。通过监听规则、健康检查、标签和API关联,实现灵活的后端资源配置,适应多变的业务需求,确保服务稳定性和资源利用率。
68 1
|
5月前
|
存储 数据安全/隐私保护 索引
Windows Server 各版本搭建文件服务器实现共享文件(03~19)
Windows Server 各版本搭建文件服务器实现共享文件(03~19)
|
3月前
|
弹性计算 持续交付 Docker
阿里云云效产品使用合集之如何部署到阿里云服务器上的 Windows Server 上的 IIS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
网络协议 Unix 网络安全
FTP服务器怎么搭建?Windows server搭建FPT服务器
FTP服务器是按照FTP协议提供文件传输服务的计算机。它用于在两台计算机间安全地传输文件,支持用户权限管理和跨平台操作。FTP使用控制连接处理命令,数据连接传输文件,有PORT和PASV模式。要搭建FTP服务器,首先在Windows Server 2008 R2上安装IIS,确保选中FTP服务。接着,创建FTP文件夹作为站点根目录,通过IIS管理器添加FTP站点,配置站点信息、身份验证和权限。测试客户端通过telnet和浏览器访问FTP服务器,确认能成功登录及浏览文件。FTP常用于文件共享和管理,可通过专用工具如FlashFXP上传下载文件。
121 0
FTP服务器怎么搭建?Windows server搭建FPT服务器
|
4月前
|
监控 Linux BI
【linux服务器系统盘爆满】/www/server/total/logs/目录内容过多导致服务器系统盘爆满,/www/server/total/logs/ 里是什么内容?是否可以删除?
【linux服务器系统盘爆满】/www/server/total/logs/目录内容过多导致服务器系统盘爆满,/www/server/total/logs/ 里是什么内容?是否可以删除?
81 1
|
3月前
|
关系型数据库 MySQL Java
软件开发2003 -Can·t to MySQL server on ‘xxxxxx‘(10038),宝塔初始化安装mysql,远程链接MySql注意事项,开始时服务器是没有放开端口的,宝塔也都开
软件开发2003 -Can·t to MySQL server on ‘xxxxxx‘(10038),宝塔初始化安装mysql,远程链接MySql注意事项,开始时服务器是没有放开端口的,宝塔也都开
|
5月前
|
网络协议 安全
ensp中nat server 公网访问内网服务器
ensp中nat server 公网访问内网服务器
|
5月前
|
开发框架 .NET 数据库连接
解决HTTP错误500.19 - internal server error -内部服务器错误的终极指南
解决HTTP错误500.19 - internal server error -内部服务器错误的终极指南
2475 0
|
5月前
|
存储 网络协议 Java
编写UDP版本的客户-服务器程序(echo server 和 echo client)
编写UDP版本的客户-服务器程序(echo server 和 echo client)
73 0
|
5月前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
下一篇
无影云桌面