受Star Citizen的动态服务器网格理念的启发,我想在Unity中创建一个概念证明。完全基于Unity ECS和Netcode,还有一个.NetOrchestration层,仅用来做服务器探索/故障恢复以及将来的数据持久化事宜(如果我能够实现)。
简要说明: 服务器网格允许客户端在服务器之间无缝地(或不)切换。人们很少讨论这个问题,因为我们习惯于认为服务器有某些基本的规模限制。在时代变革下,我们拥有最快的序列化技术,我们希望尝试这个并记录我的过程。
您看到的这里是,客户端最初与Gateway 0建立连接,然后跨越Gateway 1区域的边界,触发了连接转移。工作者服务器是无头模拟服务器。用户输入的实际Simulation将在这台工作者服务器上运行。就像您可以看到,我已经解决了这个跨越问题几乎没有延迟(可能不会在规模上持久,但我看不到优化的尽头)。
服务器穿越的过程如下:
服务器A通知服务器B边缘区域内有玩家。
服务器B启动AOI会话,并开始与服务器A通信,以同步边缘区域中的对象。
如果服务器B边缘足够近,客户端将开始对它的连接并开始传输服务器B,作为鬼魂数据的复制,并使服务器A将客户端属性转移到服务器B。 服务器B开始预渲染,服务器A传输回来的数据。这等待用户过出边界。
我以后会一步步解释这个。
我并不是很擅长写东西,所以我认为这篇文章会花一些时间。 我想要在这里发布这个,标记我的成就。我找不到有人尝试这个连接手动转换的真实测试。
Netcode经历了重大的修改以支撑这个,我允许在切换前让第二个连接预热和初始化。大部分系统基于单例模式,我需要重新配置它们。还不知道这种改变在规模上的影响,但我目前通过N4E的所有内置单元测试。
最终,Netcode的修改相当大,我允许第二个连接进行预热和初始化切换之前。大部分系统基于单例,但我需要修改以支持这一点。
评论 (0)