Nemisys教程
Nemisys搭建群组服教程
—— by从不咕咕的鸽纸
原文链接:https://www.mcbbs.net/thread-1125489-1-1.html
未经允许,严禁转载!
在此之前MCBBS上已经有一篇Nemisys教程,但发现该教程并不完善,很多东西没有介绍到,尤其是子服间的跨服传送。所以本教程作为一个补充和拓展,但绝没有抄袭。 群组服可以干什么用? 目前大多数服务器普遍为单端,即仅运行一个服务端,也许有些服务器会分为生存服和创造服或是生存服和小游戏服等双端形式,但也不属于群组服的范畴。 群组是一种分布式部署服务端从而提高服务器资源利用率的技术。比如说当你玩家很多时,单端以至于双端已经无法容纳这么多玩家,这时你就可以考虑搭建群组服来将玩家分散到一个个子服来减轻服务器压力。俗话说得好,不是伞就别硬撑着,如果你没有很迫切的需求(比如没有那么多玩家),或是你的服务器主机配置不是那么好,就不要去作死搭建群组服。
Nemisys(中文名内米西斯,来自谷歌生草机翻译)是一个使用RakNet和SPP协议的代理。它仅仅是一个代理端,起到一个转发的作用,这意味着当你仅开启一个Nemisys时,玩家是不可能进入服务器的。
Nemisys相关链接:
①Nemisys本体下载链接:https://ci.nukkitx.com/job/NukkitX/job/Nemisys/
②SynapseAPI下载链接:
(Nukkit版):https://ci.nukkitx.com/job/NukkitX/job/SynapseAPI/
(PM版):https://poggit.pmmp.io/ci/NukkitX/SynapsePM/SynapsePM
③Nemisys官方WIKI:https://cloudburstmc.org/wiki/nemisys
它的工作原理: 首先,玩家用客户端登录Nemisys代理服,然后Nemisys代理服务端会把你的数据转发到子服务器上面,子服务器可以为Nukkit或PM服务器。假设你现在有一个Nemisys服务端,一个普通的Nukkit大厅服和一个小游戏服,并且将大厅服设置为默认服务器,那么当玩家输入你服务器的IP进入游戏时,他实际上会进入这个大厅服。
①Java8或以上版本
②一台性能足以支持群组服运行的服务器主机,官方WIKI并没有给出标准配置。在这里我的服务器主机配置为12H、24G、30M并且可以流畅带动Nemisys代理端及下游服务端,大家可以用作参考。
③熟悉Nukkit或PM服务器的操作。Nukkit服务器搭设教程见此:https://www.mcbbs.net/thread-1076111-1-1.html
④一个聪慧的大脑以至于你不会犯下如把jar形式的插件放入BDS服务端文件夹的这种迷惑操作
确保你的准备工作已经做得充足。首先,我们当然要下载Nemisys的文件。注意,这里你需要下载两个东西,一个是Nemisys:https://ci.nukkitx.com/job/NukkitX/job/Nemisys/,它是一个单独的代理端;一个是SynapseAPI,它是插件形式,需要放入你想连接的下游服务器(子服)中:https://ci.nukkitx.com/job/NukkitX/job/SynapseAPI/。
没有特殊情况,我们就选择master主分支即可。
下载好Nemisys后,将其放在一个单独的文件夹;下载好SynapseAPI后,将其放入子服的plugins插件文件夹。
首先运行Nemisys
(以下内容来自NemisysWIKI)
Windows: 将以下文本粘贴到文本文档中,将其另存为与nemisys-1.0-SNAPSHOT.jar相同的目录中的start.bat: <syntaxhighlight> Code: @echo off
java -Xms1G -Xmx1G -jar nemisys-1.0-SNAPSHOT.jar
pause </syntaxhighlight> 双击这个批处理文件以运行。 Linux: 在服务器目录中创建一个新的启动脚本(start.sh)以启动JAR: <syntaxhighlight> Bash:
- !/bin/sh
java -Xms1G -Xmx1G -jar nemisys-1.0-SNAPSHOT.jar </syntaxhighlight>
打开终端并在目录执行以下操作: <syntaxhighlight> Bash: chmod +x start.sh </syntaxhighlight> 运行你的启动脚本: <syntaxhighlight> Bash: ./start.sh </syntaxhighlight> Mac OS X: 创建一个新的启动脚本(start.command)以在服务器目录中启动JAR: <syntaxhighlight> Bash:
- !/bin/sh
cd "$( dirname "$0" )" java -Xms512M -Xmx1G -jar nemisys-1.0-SNAPSHOT.jar </syntaxhighlight> 打开终端并输入:(不要按回车!) <syntaxhighlight> Bash: chmod a+x </syntaxhighlight> 将启动脚本文件拖到“终端”窗口中。(确保在chmod a + x和启动脚本之间留一个空格!) 双击你的启动脚本。
在这里我使用比较常用的Windows平台和Nukkit服务端在本地进行演示。 启动成功后你会看到Nemisys文件夹中出现这些东西:
logs和plugins文件夹懂得都懂,不作过多解释。 我们需要更改的是server.properties这个文件,这里只对常用的更改项进行说明,其他的通常不需要多作更改: <syntaxhighlight>
- Properties Config file
- 2020-07-22 08:48:16
motd=BlockCityNetwork(服务器动态显示条内容) server-ip=127.0.0.1(代理端IP) server-port=19132(代理端端口,玩家将通过这个端口进服) synapse-ip=127.0.0.1(子服IP) synapse-port=19133(子服端口,玩家不可通过此端口进服。注意子服端口可不用开放至公网,且子服端口不可被占用) password=12345678909LBWNB(密码,记住它,稍后会用,必须为16位。) lang=chs(语言,chs为中文,eng为英文) async-workers=auto enable-profiling=off profile-report-trigger=20 max-players=2333(最大玩家数。这里指的是整个群组服的最大玩家) plus-one-max-count=on dynamic-player-count=on players-per-thread=50 enable-query=on enable-rcon=off rcon.password=iYjk1NjI5N debug=1 enable-synapse-client=off(是否允许玩家不通过代理直接进入子服,建议填off) display-stats-in-title=on ansi=on send-start-message=off compression-level=7 call-data-pk-ev=off automatic-bug-report=on </syntaxhighlight> 现在你已经基本配置好Nemisys了,下一步去配置SynapseAPI。 现在启动或重启你的子服,然后将它关闭以生成SynapseAPI的配置文件。打开你子服的plugins文件夹,找到SynapseAPI这个文件夹,打开config文件: <syntaxhighlight>
- Synapse API for Nukkit: config
disable-rak: false enable: true
entries:
- server-ip: 127.0.0.1(这里填刚刚在Nemisys的配置文件里写的子服IP) server-port: 19133(这里填刚刚在Nemisys配置文件里写的子服端口) isMainServer: true(是否作为默认服务器,即玩家加入后的默认服务器。若多个服务器设置为默认服务器,则玩家加入时会随机分配到这些服务器中。你可以用这个功能大展身手。) isLobbyServer: true(是否作为大厅服务器,即玩家返回大厅时进入的服务器。不一定是默认服务器才能作为大厅服) transferOnShutdown: true(在子服关闭后返回默认服务器。该功能已失效,详见:<a href="https://cloudburstmc.org/threads/transfer-on-shut-down-in-nemisys-didnt-work.933/">https://cloudburstmc.org/threads/transfer-on-shut-down-in-nemisys-didnt-work.933/</a>中的回复) password: 12345678909LBWNB(刚刚你在Nemisys配置文件里填写的密码) description: NukkitIsTheBest(描述,稍后会用到,请保证所有子服的描述不一致且描述不带空格) autoConnect: true
</syntaxhighlight> 配置全部完成。现在启动Nemisys,然后再启动子服,(请注意以后的群组服开启顺序都是首先开启Nemisys端然后再启动子服,否则会导致子服连接不上代理)如果Nemisys的控制台出现如下提示则表示群组服已搭建成功,现在已经具备基础的功能了。
请忽略下面的报错,那是因为我直接关闭子服控制台导致的。 仿照以上方法,你可以添加更多子服。同一个群组服中的子服SynapseAPI配置中的IP和端口要保持与Nemisys中的配置一致。
按照上述步骤搭建完成群组服后,你仅能加入默认服务器。尽管Nemisys有一个/server命令,但它似乎是无效的(详见:https://cloudburstmc.org/threads/how-to-use-nemisys-for-transfer.929/中的回复)。因此这里我们需要使用一个插件来达成跨服操作: https://cloudburstmc.org/resources/synapsetools.225/(尊重作者,请在原贴下载) 将此插件下载后,放入子服的plugins文件夹,重启服务器生成配置文件。一般情况下无需更改其配置文件,用默认的即可。 如何跨服? ①子服间跨服:输入/transfer 子服的描述(对,就是上面SynapseAPI配置文件里写的那个description) 即可跨服。 ②返回默认服务器:输入/hub 以上命令均可搭配NPC插件或菜单插件使用。
1.群组服无需将全部端口开放到公网,通常情况下只需要玩家加入的端口开放到公网即可。 2.不建议子服使用PowerNukkit核心。PN核心的玩家加入事件似乎与原版NK不同,这会导致玩家无法通过transfer加入使用PN核心的子服。 3.注意,群组服不代表玩家数据可以在各个子服互通,Nemisys本身没有互通数据的功能。若想使玩家经济、背包物品等在各子服间同步,你需要使用一些插件或有能力可以独自开发。这里推荐几个数据互通插件: 经济(EconomyAPI)数据互通:https://cloudburstmc.org/resources/economyapi-mysql-provider-add-on.316/ 背包物品互通:https://cloudburstmc.org/resources/playersync.367/ 聊天信息同步:https://cloudburstmc.org/resources/nemisyschatmodule.199/ 4.Nemisys开发缓慢,请谨慎使用。你可以选择使用PetteriM1开发的的Nemisys,支持多版本:https://github.com/PetteriM1/NemisysProxy
作者的话:百忙之中得以抽出时间完成本教程,势必会有所疏漏,欢迎在讨论页指出错误。