认识Shards&&迁移数据




如果你正在阅读这篇文章,那么你一定是能顺利的运行一个专用的服务器了:你知道如何使用steamcmd和- conf_dir等一些启动参数来运行和维护专用服务器。(如果没有的话,你可能要花一些时间在维基上。)所以事不宜迟:

认识Shards

你需要了解的最主要的内容是,除了客户端和服务器相互交谈,每个从服务器还必须与主服务器进行交谈。所以有两个节在配置文件中分别设置这两项工作,在[network]选项(服务器与客户端之间)和[shard]选项(服务器与服务器之间)。

[network] Settings

最近(的更新)在[network]部分的变化并不大,但是你需要知道的一点是:在同一台机器上运行的每个专用服务器都需要与客户端进行通信!这意味着下面的设置每个专用服务器都必须是唯一的(下面的设置就如同身份证一样,用来区分不同的专用服务器,因此在同台机器上运行必须是唯一的):

[network]

server_port = 10999 或 11000 或 11001 等等.

[shard] Settings

我会写出所有的设置并尽可能的解释它们,然后给出完整的例子如下。

shard_enable = true|false

必需 任何参与集群服务器的专用服务器都必须设置为“true”!

is_master = true|false

必需 如果这个专用服务器作为主服务器,那么必须设置为”true”,所有其他服务器将连接到它。

master_ip = 127.0.0.1

从服务器必需 主服务器的IP地址。127.0.0.1是指在同一台机器,如果不是在同一台机器上运行主从服务器,那么必须提供运行主服务器的机器的(外网)IP地址。

shard_name =

可选 方便调试,因为这个名字会在许多连接消息中被打印出来。

cluster_key =

推荐 设置一个匹配密钥,只有匹配密钥相同的服务器才可以加入你的服务器集群。这确保只有你的服务器在集群中(更加安全)。

master_port = 10888

可选 主服务器上会监听这个端口,同时从服务器会通过这个端口和主服务器连接。(说白了就是,集群服务器中所有专用服务器都应该设置为相同的值。 )通常你不需要配置,但它可能在多台机器运行时是必要的。

bind_ip = 127.0.0.1

可选 允许外部连接的IP(可能吧)。127.0.0.1意味着只接受本地IP连接,如果你的专用服务器都在同一台机器上运行,请选择这个IP;0.0.0.0意味着接受任何外部连接,如果你的服务器在多台机器上运行,请选择这个IP。

shard_id =

可选 如果不设置这个值,系统将随机分配,但你可以自己填写这个值。这是在“in-game portals”中确定服务器的身份的。(应该是像身份证号一样的存在,只要保证唯一即可)

 

如果你是在同一台机器上运行,那么你需要用“conf_dir”来为每个服务器单独设置一个存档目录,就像这样:

./dontstarve_dedicated_server_nullrenderer -conf_dir DST_Master
./dontstarve_dedicated_server_nullrenderer -conf_dir DST_Slave

你的设置文件的[shard]节部分的内容应该是这样的:

[shard]

shard_enable = true
is_master = true
cluster_key = change_this_if_you_set_bind_ip

多世界设置:一个Shards和Portals的教程

现在就让我们来看看如何让多个专用服务器集群来构建一个多世界世界。

所有的从服务器必须连接到主服务器,由主服务器管理所有服务器之间的数据迁移。所以如果你想要多个从服务器连接到主服务器,每个从服务器的以下设置必须彼此不同:

server_port

shard_id

shard_name

同时,他们的以下设置必须相同:

master_ip

master_port

上述两点的意义在于让主服务器都能顺利区分从服务器,同时保证从服务器能顺利连接上主服务器。

硬币的两面面,从一个服务器到另一个服务器:

你需要知道的最重要的事情是每个服务器都是通过世界的shard_id连接到另一个世界的。这是通过配置在worldmigrator组件的:SetDestinationWorld(world_id, permanent) 来实现的。

每个单独的服务器都是封闭的圆环(之理),因此如果你想让两个服务器互相连接,你必须处理操纵服务器的两端(受死吧,圆神!)。现在,这仍需要通过手动完成,我们只实现了一个地面世界和一个洞穴世界自动化~~

这里有一个连接一个地上到两个洞穴的方法:

首先,先弄两个分别能单独连上地上世界的洞穴服务器,并假定他们的shard_id分别为“233”和“666”。

启动三个服务器。你会发现,在你的地上世界的的洞穴入口只能连接到其中一个洞穴服务器。但不要紧,我们要改写它!

在控制台运行 c_gonext(‘cave_entrance’)(命令A) 瞬移到其中一个洞穴入口(?)。然后,站在旁边,在控制台(原文为CONSLE,怀疑是笔误)运行:

c_find(‘cave_entrance’).components.worldmigrator:SetDestinationWorld(233, true)(命令B)

将使该洞穴入口永久连接到233这个洞穴世界。现在再运行这两个命令(命令A和B)的4次,让5个入口连接到233。

再次运行c_gonext(‘cave_entrance’),但是这回将连接命令(命令B)改为如下:

c_find(‘cave_entrance’).components.worldmigrator:SetDestinationWorld(666, true)

你可以看到我们将这个洞穴入口连接到了666这个洞穴世界。是不是很简单(去屎吧Klei)!这样做4次,现在你的地上世界里的每一个入口都将与洞穴相连。

现在你必须在每个洞穴世界中做一些类似的操作(即将每个洞穴回地上的那玩意绑定到地上世界)。地上世界(master)的ID永远是1,然后你可以通过如下命令来实现:

c_gonext(‘cave_exit’)

c_find(‘cave_exit’).components.worldmigrator:SetDestinationWorld(1, true)

你可能已经意识到这一点,你只连接5个从地面到洞穴的入口,但有每个洞穴又分别有10个入口(?)…好吧,我会把它留给你,你想怎样解决这个问题。(怎么说呢,这个问题我大概已经清楚了,不过不好解释吧~~)

 

 

您也可能喜欢:

认识Shards&&迁移数据》上有3条评论

  1. 我也跟楼下一样 从世界是连上主世界了 就是 控制台执行代码后 洞口是堵起来的
    不知道怎么回事

    创意工坊有个多层世界MOD 但作者说MOD依赖Net 4.5 ubuntu根本装不了啊

  2. 对啊。关于多层世界,希望可以有详细一点的介绍。我的服务器可以正常开启多个。但是只能连接到一个洞穴。然后我按照博主的方法。设置了c_find(‘cave_entrance’).components.worldmigrator:SetDestinationWorld(我的服务器ID, true),然后我把洞穴敲开。下面依然是被封堵的。并且不能再进入。不知道是什么问题。所以还忘有一个比较详细的说明。谢谢博主了。我的e-mail:[email protected]

发表评论

电子邮件地址不会被公开。 必填项已用*标注