随着智能手机和网络的普及,工作之余,人们都会玩会儿游戏。在游戏中,大家可以很容易看到有一个“延迟”的数据,一会高一会低的。玩游戏的朋友有没有这样的经历,延迟低的时候,可能打开个画面都很麻烦。今天,我们就来了解下,游戏服务器是怎样工作的?
首先,游戏服务器比一般的服务器要保存更多的状态:
玩家的属性这些自不必说,一般的IM服务也会有,还有一些马上就会变化的数据。比如某个玩家的生命值,发技能前后的法力值等等。这些值区别于一般的属性值如名字、ID这些的差异在于会经常性的变化,还会参与到逻辑的计算中,比如你一个多少等级的玩家吃了什么东西之后战力值变化为多少,打在一个多少属性的玩家身上会不会被他闪避,会不会产生暴击....游戏逻辑中的战斗技能计算是很大的一个点,我不太熟悉这块就不展开多说了。可以看到,游戏逻辑的CPU计算是非常多的。
其次,游戏服务中,每个玩家不是独立存在的。
而是很有可能会与其他玩家发生状态的交互,一般的服务器比如HTTP什么的,你一个请求过来查你的数据,和别人的请求是独立的,并没有什么交互。
客户端之间会有交互这一点。举最简单的例子,一个人在一个场景里面说了一句话,那么同一个屏幕的玩家也需要能够看到他说的这句话。此时游戏服务器就需要判断,多远的距离以内的玩家,会认定为是“同屏幕”的玩家,需要向这些玩家广播这个玩家说的这句话。
这个广播就比较麻烦了。
首先,计算哪些玩家在“同屏幕”。就是我们在第一点提到的玩家身上某些经常变化的属性需要做的运算,在这里需要根据玩家的坐标。找出来跟在同屏幕的玩家,用到的是AOI的概念。另外,找到了这些需要接收这个消息的玩家之后,将消息转发给它们又是一个IO密集的操作,假如场景中有10个人,那么一句话就需要同时广播给另外9个人,假如有100人、1000人呢,数量就更大了。所以同样的一个硬件配置的服务器,可能跑Nginx可以同时处理上万的链接,但是对于一个游戏服务器就只有1,2千了,就是因为游戏服务器是一个CPU密集而且IO密集的服务器类型.
Vecloud提供专业的海外IDC服务,为游戏、金融等企业提供过很多方案和支持,如果您也有游戏服务器需求,欢迎来电咨询。