

用 PCL2-我的世界启动器 联机时,会遇到几类看起来很随机的问题:
这几件事看起来互不相干。但它们其实来自同一个问题:这一局里,"世界"到底跑在哪台机器上。
先说清楚"联机"其实有两种形态,它们的差异不在"连谁",而在谁承担计算。
第一种:自己开房。
用 PCL2-我的世界启动器 进入游戏后,一方把世界"开放到局域网",其他人连进来。
这种模式下,开房那台机器就是"世界"——它负责模拟整个世界(生物的移动、方块的变化、时间的推进),其他人只是把操作发过去、把画面收回来。
第二种:独立服务器。
有一台机器专门运行服务端,所有人(包括开服的人)都作为客户端连它。
世界在服务器上,不跟着任何玩家走。
这个差别一句话就能概括:
房间的性质,取决于"世界"这台机器上跑在谁那儿。
结果一:开房的人退出,房间就没了。
因为"世界"跟着他一起退出了。 这不是软件设计得不好,而是这种模式下世界本来就在他那台机器上。
结果二:开房的人卡,所有人都卡。
因为大家等的是同一台机器算完。 他那边一旦出现停顿,所有人同时感受到——而且这个延迟是没有办法靠"换个更好的网络"解决的,因为瓶颈不在网络上。
结果三:开房的人负担最重。
他要同时做三件事:模拟世界、渲染自己的画面、把结果发给所有人。而其他人只需要"渲染 %2B 收发操作"。
所以"谁开房谁吃亏"是有原因的,不是心理作用。
结果四:独立服务器更稳定,但需要有人维护。
因为世界不跟着玩家走。 谁掉线都不影响房间,代价是要有台机器一直开着,而且配置与内容的一致性要求更高。
这一节和上面的不是一回事,但经常被混在一起。
主动连出去(出站)几乎总是通的——你请求外部服务,网络环境通常不拦。
但让别人连进来(入站)需要额外条件:你那台机器要能被外部找到并建立连接。
家庭网络通常是"在路由器后面"的:没有对外的地址,外部无法直接连入。
于是在同一台机器上会出现这种不对称:
这两个结果可以同时成立,而且它们并不矛盾。 所以"能连上别人"这件事,不能用来证明"别人也能连上你"。
具体的处理方向不是在本机反复切换设置,而是解决"可达性":要么让这台机器变得可被访问,要么借助一个双方都能访问的中间节点来转发。
中转方案改变了什么、没改变什么,值得分清:
这是"装了模组就连不上"的原因。
联机要求参与方的"内容集合"一致:游戏版本、加载器、装了什么模组,甚至部分配置。
不一致的后果有两种:
所以"我装了模组就连不上"通常不是网络问题,而是参与方不在同一套规则下。
这与"同一个游戏的两套实现不能互通"是同一类要求:联机的前提不是"网络能通",而是"双方按同一套规则计算"。
按人数和持续性来定:
一句话的判断方法:你能接受"世界跟着某个人的电脑走"吗? 能接受就用开房;不能,就得有台独立的机器。
关于 PCL2-我的世界启动器 的联机,记住四条:
这里可以带走的经验是关于"权威"的:任何多方协作的系统,都必须有明确的"谁说了算"——游戏里的世界模拟是这样,其他场景也一样。
不理解这一点,就会把"架构决定的现象"当成"配置没调好":反复换网络、改设置、重装,而问题从一开始就出在"该由谁承担计算"这个选择上。
https://www.ijinshan.com/software/PCL2.html?channel=4099
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。