一个关于赛马游戏的服务器构架

已查看 25 次
跳至第一个未读帖子

closeall

未读,
2006年2月28日 20:19:072006/2/28
收件人 高性能网络编程邮件列表
前几天看了一个网络赛马游戏。不知道他的服务器是如何构架的,问题的关键在于服务器是如何控制马跑的快慢的。是实时控制的么?就是说服务器时时刻刻都在向每个客户端发送马的状态信息,如果是这样的话,服务器的负担会不会太重,而且还会出现卡的现象。如果不是这样,服务器应该怎样实现这样的控制。

大家讨论一下。

Ghost Cheng

未读,
2006年2月28日 20:22:552006/2/28
收件人 dev4s...@googlegroups.com
Hi closeall:
 
我觉得是速度改变的时候才通知客户端。
 


 
On 3/1/06, closeall <closea...@gmail.com> wrote:
前几天看了一个网络赛马游戏。不知道他的服务器是如何构架的,问题的关键在于服务器是如何控制马跑的快慢的。是实时控制的么?就是说服务器时时刻刻都在向每个客户端发送马的状态信息,如果是这样的话,服务器的负担会不会太重,而且还会出现卡的现象。如果不是这样,服务器应该怎样实现这样的控制。

WL

未读,
2006年2月28日 20:23:042006/2/28
收件人 高性能网络编程邮件列表
在服务器开始一个新游戏时候,游戏的结果就已经注定了,客户端就是在保证结果的前提下随机让这马快一点,那马慢一点,总之一切都已经注定,一切都是天意。呵呵!

Ghost Cheng

未读,
2006年2月28日 20:24:512006/2/28
收件人 dev4s...@googlegroups.com
Hi all:
 
哈哈,WL说的也是比较简单可行的办法。

 
On 3/1/06, WL <wl...@hotmail.com> wrote:




--

Sincerely,
Ghost Cheng
Email : ghost...@gmail.com
Web : http://www.GhostSoft.net
已删除帖子

closeall

未读,
2006年2月28日 20:26:352006/2/28
收件人 dev4s...@googlegroups.com
to Ghost Cheng :
   你的意思是说其他的计算由客户端来计算么?但是如果这样的话,它能保证和其他的客户端同步么?

 
在06-3-1,Ghost Cheng <ghost...@gmail.com> 写道:

Ghost Cheng

未读,
2006年2月28日 20:30:222006/2/28
收件人 dev4s...@googlegroups.com
Hi closeall :
 
client只是依据服务器发来的数据,播放动画而已,服务器在比赛开始的时候,传来各个马的初试速度,client依据此速度绘制。
当服务器计算到速度该变的时候,通知client,这时client再调整绘制的速度。
 
只要保证不丢包,就不会出现问题,基于TCP方式,除非网络环境太差,一般数据都是正确的。

 
On 3/1/06, closeall <closea...@gmail.com> wrote:
to Ghost Cheng :
   你的意思是说其他的计算由客户端来计算么?但是如果这样的话,它能保证和其他的客户端同步么?

 
在06-3-1,Ghost Cheng <ghost...@gmail.com > 写道:
Hi closeall:
 
我觉得是速度改变的时候才通知客户端。
 


 
On 3/1/06, closeall <closea...@gmail.com > wrote:
前几天看了一个网络赛马游戏。不知道他的服务器是如何构架的,问题的关键在于服务器是如何控制马跑的快慢的。是实时控制的么?就是说服务器时时刻刻都在向每个客户端发送马的状态信息,如果是这样的话,服务器的负担会不会太重,而且还会出现卡的现象。如果不是这样,服务器应该怎样实现这样的控制。






closeall

未读,
2006年2月28日 20:37:352006/2/28
收件人 dev4s...@googlegroups.com
Hey Ghost Cheng:
 
     如果在本地机器的资源不足的时候,就是在播放动画的时候出现了卡,即卡机不是用于网络造成的,而是由本地的机器造成的,在这种情况下也会出现不同步的现象,不知道这如何解决??

 

大宝(sodme)

未读,
2006年2月28日 20:41:052006/2/28
收件人 高性能网络编程邮件列表
hi all:
偶问了一个曾经作过这种类似游戏的朋友:
服务器端会根据在一场比赛之前各个下注人的相关操作及属性预先算好结果,
而客户端基本上就是为了表现赛马过程的这个画面,
同时, 为了减少通信量,
关于这个赛马预算的逻辑在客户端和服务器端都会各自保留一份,
这样游戏开始后, 各个客户端自己算自己的就行了,
通信量也大为减少.


-----
Best regards
大宝(sodme)
msn: sod...@hotmail.com
email: sodm...@gmail.com

Ghost Cheng

未读,
2006年2月28日 20:41:432006/2/28
收件人 dev4s...@googlegroups.com
Hi closeall :
 
你说的这种client卡的时候,socket上的数据还是继续堆积的,等到CPU资源恢复的时候,还是会继续处理的,那时执行到最后一次传来的速度时,就正常了。
这种情况只能怪client的机器太差,就算真的出错也不用考虑。
你不能要求586去运行WOW吧,呵呵。

 
On 3/1/06, closeall <closea...@gmail.com> wrote:
Hey Ghost Cheng:
 
     如果在本地机器的资源不足的时候,就是在播放动画的时候出现了卡,即卡机不是用于网络造成的,而是由本地的机器造成的,在这种情况下也会出现不同步的现象,不知道这如何解决??

 
在06-3-1,Ghost Cheng <ghost...@gmail.com > 写道:
Hi closeall :
 
client只是依据服务器发来的数据,播放动画而已,服务器在比赛开始的时候,传来各个马的初试速度,client依据此速度绘制。
当服务器计算到速度该变的时候,通知client,这时client再调整绘制的速度。
 
只要保证不丢包,就不会出现问题,基于TCP方式,除非网络环境太差,一般数据都是正确的。

 
On 3/1/06, closeall <closea...@gmail.com > wrote:
to Ghost Cheng :
   你的意思是说其他的计算由客户端来计算么?但是如果这样的话,它能保证和其他的客户端同步么?

 
在06-3-1,Ghost Cheng <ghost...@gmail.com > 写道:
Hi closeall:
 
我觉得是速度改变的时候才通知客户端。
 


 
On 3/1/06, closeall <closea...@gmail.com > wrote:
前几天看了一个网络赛马游戏。不知道他的服务器是如何构架的,问题的关键在于服务器是如何控制马跑的快慢的。是实时控制的么?就是说服务器时时刻刻都在向每个客户端发送马的状态信息,如果是这样的话,服务器的负担会不会太重,而且还会出现卡的现象。如果不是这样,服务器应该怎样实现这样的控制。






--

Sincerely,
Ghost Cheng
Email : ghost...@gmail.com







--

Sincerely,
Ghost Cheng
Email : ghost...@gmail.com
Web : http://www.GhostSoft.net

大宝(sodme)

未读,
2006年2月28日 20:45:352006/2/28
收件人 高性能网络编程邮件列表
ps:
这种游戏几近赌博, 在国内应该很难过审查这一关.

closeall

未读,
2006年2月28日 20:48:212006/2/28
收件人 dev4s...@googlegroups.com
to sodmo :
 
    我想这样方案同样会出现不同步的问题,不知道采用这种方案如何解决同步的问题。
 


2006/3/1, 大宝(sodme) <sodm...@gmail.com>:

Ghost Cheng

未读,
2006年2月28日 20:50:292006/2/28
收件人 dev4s...@googlegroups.com
Hi closeall :
 
其实大宝的方法也可以做到同步,只要服务器事先产生结果的时候,也预先设定好各个马何时加速,何时减速,然后随结果一并发到client。
client根据这份数据播放即可。

 
On 3/1/06, closeall <closea...@gmail.com> wrote:
to sodmo :
 
    我想这样方案同样会出现不同步的问题,不知道采用这种方案如何解决同步的问题。
 


2006/3/1, 大宝(sodme) <sodm...@gmail.com>:

closeall

未读,
2006年2月28日 20:51:322006/2/28
收件人 dev4s...@googlegroups.com
to Ghost Cheng:
 
     就算是得到了这个速度也还会有不同步的问题,因为在卡机的时候他们位置已经不同步了,即得到这个速度后也是在原来不同步的基础上了,除非同样得到马的位置信息,但是马的位置信息因该如何获取呢?
 

大宝(sodme)

未读,
2006年2月28日 20:51:462006/2/28
收件人 高性能网络编程邮件列表
你说的只是过程不同步, 结果肯定是一样的,
只要结果一样, 我觉得可以接受.

对于这种强调速度的游戏而言,
常常都会采用一些取巧的方式来作. :)

------


Best regards
大宝(sodme)
msn: sod...@hotmail.com

email: sodm...@gmail.com

closeall

未读,
2006年2月28日 20:54:582006/2/28
收件人 dev4s...@googlegroups.com
hi sodme ;
    
    你说得对,我只想了解一下类似于这样的游戏的技术实现,呵呵

 
2006/3/1, 大宝(sodme) <sodm...@gmail.com>:

sharon

未读,
2006年2月28日 20:56:162006/2/28
收件人 dev4s...@googlegroups.com
我想你说的这种不同步的问题,跟以前的VCD机出现马赛克的情况一样吧?就是如果某个地方卡了,过一秒钟或者几秒钟后,马会突然出现在前面,中间那段画面这个client看不到。呵呵。。

Ghost Cheng

未读,
2006年2月28日 20:58:282006/2/28
收件人 dev4s...@googlegroups.com
Hi closeall :
 
我之前说的处理卡机的方式,你理解错了,client的处理方式应该是只要解析到变更速度的数据包,就立即改变速度,
这样如果卡机恢复后,积压了10个变更速度的数据包,那么顺序执行,中间不需要把每个速度都播放动画,直到最后一个数据包被执行,
那么得到的就是最后的速度了。

 
On 3/1/06, 大宝(sodme) <sodm...@gmail.com> wrote:
你说的只是过程不同步, 结果肯定是一样的,
只要结果一样, 我觉得可以接受.

对于这种强调速度的游戏而言,
常常都会采用一些取巧的方式来作. :)

------
Best regards



--

Sincerely,
Ghost Cheng
Email : ghost...@gmail.com
Web : http://www.GhostSoft.net

大宝(sodme)

未读,
2006年2月28日 20:59:572006/2/28
收件人 高性能网络编程邮件列表
hi closeall:

有以下两点, 交流一下:

1.如果算法和算法所依据的数据都是固定的,那么逻辑运行的过程也可以作到完全一样,
即使是卡机,
它之后也是仍然按照原先设定的逻辑在跑; 而且,
在游戏开始后, 各个客户端自己已经不能操控游戏了,
不会对表现过程造成干扰, 只是在"看"表现过程,
在等待比赛结果.

2.既然说是由各个客户端自己在控制相关的逻辑, 那么,
它的同步原理就与C/S架构的完全不一样,
客户端会有自己的逻辑来提供位置信息.

> > Email : ghost...@gmail.com
> > Web : http://www.GhostSoft.net <http://www.ghostsoft.net/>
> >
> >

sunway

未读,
2006年2月28日 21:08:082006/2/28
收件人 高性能网络编程邮件列表
恩,我的想法是服务器计算加速度,定时给客户端发送更新的加速度。

closeall

未读,
2006年2月28日 21:15:272006/2/28
收件人 dev4s...@googlegroups.com
hey Ghost Cheng :
 
    我想我理解了你的意思,但你还不太理解我的意思。
 
   假如现在有两个客户端,一个客户端的一匹马在跑到地图位置的5米处,这时CUP资源不足,出现了卡机,而另一个客户端在马跑到地图位置的6米处出现了cpu资源不足。在这n个时候以后即便两个客户端都得到了服务器发来的相同的速度信息,还会出现过程的不同步,因为这个两个客户端出现卡机时马所在的地图位置是不一样的,不知道我这样说你明白我的意思了么?

 
在06-3-1,Ghost Cheng <ghost...@gmail.com> 写道:
Hi closeall :

Ghost Cheng

未读,
2006年2月28日 21:18:502006/2/28
收件人 dev4s...@googlegroups.com
Hi closeall:
那也很好办阿,服务器发送变更速度的消息时,加上该马当前的位置不就行了。

 
On 3/1/06, closeall <closea...@gmail.com> wrote:



--

Sincerely,
Ghost Cheng
Email : ghost...@gmail.com
Web : http://www.GhostSoft.net

closeall

未读,
2006年2月28日 21:25:162006/2/28
收件人 dev4s...@googlegroups.com
hey Ghost Cheng:
 
    问题是服务器如何获取马匹的当前位置,是其他客户端发给他的呢,还是服务器自己算的呢?如果是服务器自己计算,应该如何计算呢?是不是在客户端的开始跑马的时候,服务器这边同时也跑呢?我想应该是这样的,不知道是否还有别的方法 ? 呵呵!!!

 

Ghost Cheng

未读,
2006年2月28日 21:27:482006/2/28
收件人 dev4s...@googlegroups.com
Hi closeall :
 
倒~说了半天我们都理解错你的意思了,我们以为是下注赌马的游戏,马全是服务器控制的。

 

Ghost Cheng

未读,
2006年2月28日 21:30:162006/2/28
收件人 dev4s...@googlegroups.com
Hi closeall :
 
按照你说的,如果马是由client操控的,那就和MMO没什么大区别了,玩家控制马的方向和加速,服务器验证后,通知其他玩家。

 

closeall

未读,
2006年2月28日 21:32:532006/2/28
收件人 dev4s...@googlegroups.com
to Ghost Cheng ;
 
    刚才我表达错我的意思了, 其实我玩的那个游戏就是赌马的,不是由客户端控制的, 呵呵

 

大宝(sodme)

未读,
2006年2月28日 21:32:592006/2/28
收件人 高性能网络编程邮件列表
呵呵, 前面邮件里说了:
服务器和客户端都有相同的计算逻辑. :)

> > > > <ghost...@gmail.com>
> > >
> > >
> >
> >
> > --
> >
> > Sincerely,
> > Ghost Cheng

Collins

未读,
2006年2月28日 23:45:542006/2/28
收件人 高性能网络编程邮件列表
第一次发言,呵呵,我的解决方案如下:

0、比赛开始
1、服务器根据本地信息一次性计算出所有结果,包括:
1)每匹马的初始速度
2)每匹马速度变化序列(vector<timeStamp, newSpeed>)
2、服务器将以上信息广播给所有参赛者
3、参赛者收到上述信息后,计算出动画序列(vector<timeStamp,
position, aniFrame>)
4、rander,
如果CPU犯卡,根据当前时间跳过动画序列中过期的帧。
5、goto 4, 直到动画序列播放结束。
6、比赛结束,显示结果

回复全部
回复作者
转发
0 个新帖子