很多网络游戏希望把所有玩家放在一起,也就是在一个游戏世界中进行游戏。目前的网络游戏虽然玩家可以在不同的场地中行走,并因此在不同的服务器间移动,但支持一块场地运行所用的服务器却不能从一台服务器更换到另一台。一台服务器的能力有限,因此同一块场地上的玩家人数也不能太多。另外场地上的玩家会有时多有时少。玩家多的时候会发生其他玩家不能进入这块场地等问题,玩家少的时候服务器资源又被浪费了。因此本方案提出了一种动态分配支持一块场地运行所用服务器的方法。它可以支持所有的玩家在同一块场地中进行游戏。
我们知道有很多游戏可以保存游戏进度。保存某一时刻游戏的状态。在以后装入这个状态。即使是在保存这个状态不同的计算机上,也可以使游戏完全恢复到保存时的状态,从而从那个状态继续游戏。如果我们把某一台服务器C1上的某一块场地SC1的状态传送给另一台服务器C2,就可以把支持SC1运行所用的服务器从C1移到C2。然后SC1中的所有客户端CL1需要把他们游戏所用的服务器从C1改换到C2。那么如何把网络游戏客户端所用的服务器从一台移到另一台呢?C1在时间T1保存SC1的状态S1,并把S1传送给C2。C1给CL1发送消息D3,要求CL1和C2连接,并改为向C2传输D1以及从C2接收D2。由于网络游戏服务器端和客户端是异步运行的,所以在T1时间之后,CL1接收到D3之前,CL1仍然会向C1发送游戏数据D4。C1需要把D4转发给C2。C2要先接收并处理完D4后才能继续处理CL1直接发送给它的游戏数据。
现在我们已经能把支持一个场地运行所用的服务器整个地从一台服务器换到另一台了。如果更进一步,我们把场地SC2中的一部分状态,例如一部分玩家和非玩家角色R1的状态S3从一台服务器C3搬到另一台服务器C4,由C4来支持R1的运行以及计算和确定R1的状态。未搬到C4的那些状态S5仍然由C3计算和确定。这样我们就把能支持SC2运行所需的负载分摊到两台服务器。在C3需要获取S3的状态时,需要请求C4把S3的状态传送给它。在C3希望修改S3的状态时,也需要请求C4来执行。注意,应该把C3修改S3的状态看成是请求而非强制或确定地执行。因为有很多因素导致这种请求不成功。例如C3上的一个玩家P1向C4上的一个玩家P2射击。但是C
...
Read more »