close

很多网络游戏希望把所有玩家放在一起,也就是在一个游戏世界中进行游戏。目前的网络游戏虽然玩家可以在不同的场地中行走,并因此在不同的服务器间移动,但支持一块场地运行所用的服务器却不能从一台服务器更换到另一台。一台服务器的能力有限,因此同一块场地上的玩家人数也不能太多。另外场地上的玩家会有时多有时少。玩家多的时候会发生其他玩家不能进入这块场地等问题,玩家少的时候服务器资源又被浪费了。因此本方案提出了一种动态分配支持一块场地运行所用服务器的方法。它可以支持所有的玩家在同一块场地中进行游戏。

    我们知道有很多游戏可以保存游戏进度。保存某一时刻游戏的状态。在以后装入这个状态。即使是在保存这个状态不同的计算机上,也可以使游戏完全恢复到保存时的状态,从而从那个状态继续游戏。如果我们把某一台服务器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 »
Views: 758 | Added by: ystyle | Date: 2009-03-20 | Comments (0)

我看“变速齿轮”的工作原理 

  最近,我在“大众软件”上看到一则关于软件“变速齿轮”的报道。我很少上网,所以对这方面了解比较少,不知道它在网上已经流行好几个月了。当时的感觉就是太惊奇了,很佩服王荣先生是怎么做到如此神奇的事,尤其是他如何保证各种游戏的兼容,他如何知道不同游戏对时间的处理。我立刻上网DOWN了个0.22b版,在试用的过程中,我发现“变速齿轮”不但可以加速游戏,实际上,它可以加速任何windows程序(从某种程度上),我逐渐认识到它的工作原理,不一定对,仅是猜测而已。先声明一点,我是使用UNIX的,并不是很了解windows编程,所以只能给出概念上大体的认识,而无法说出具体的实现办法。
  首先,先看看计算机是如何有时间概念的。在主板上有一个时钟晶振,依靠电池供电,本质上就是一块电子表。计算机软件中所有的时间概念,归根结底都来自着个“硬件时间”,换句话说,如果这个时间不对,则任何运行在该主板上的程序对时间的处理都不可能正确。(包扩各种操作系统)
  那么,操作系统是如何知道这个时间的呢?这是因为这个时钟每过一定时间都会产生一个硬件中断(INT)操作系统可以截取这个中断并做相应的处理,从而获得时间的概念。好象是20ms产生一次中断,一秒钟50次。具体的中断号我忘了,就称为 INT A 吧。对Dos而言,它在启动时就准备好了对INT A的中断处理程序(Dos核心的一部分),当我们使用DOs的时候,在提示符状态下,即使不做任何操作,Dos内部在一秒钟时间内,也会接受50次INT A,执行50次中断处理程序。只是这一过程在幕后完成,我们无法感受到。Dos的中断处理程序所做的,就是让Dos能够了解当前的时间。(如保留当前日期,时间在内部变量中等操作)。但很重要的一点,在INT A中断处理程序的末尾,又调用INT B。
INT B是Dos为用户保留的软中断,在缺省情况下,Dos的INT B中断处理程序立即返回,不做任何事。而
用户可以编写自己的INT B中断处理程序定时处理自己的操作,然后把它替换Dos原来的空INT B中断程序。比如我有一个程序需要在12:00运行,一种方法是写如下代码:
for(;;){
if(时间是12:00) break;
sleep(5); /*休息5秒钟,这句在D ... Read more »

Views: 1125 | Added by: ystyle | Date: 2009-03-20 | Comments (0)