魔兽世界和EVE服务器能够同时支持5万人在线的技术肯定让很多人流口水吧。今天我用redis来模拟实现“相位技术”。所谓“相位技术”就是将服务器分为多个并行的空间。是对传统分割成多个地图场景技术的升级。这个技术通过创建多个并行时空的概念。将多个时空分配到不同的服务器。在客户端请求数据时再将多个时空的数据整合在一起。这样理论上就可以将地图场景再次无限分割。所以理论上使用“相位技术”的服务器承载人数可以达到非常恐怖的5万人。
传统的一个地图一个服务器的做法。如果玩家过多就会大量消耗服务器CPU资源。直到CPU资源耗尽达到服务器人数上限。因为所有逻辑运算都拥挤在一个线程。这种多个功能间资源抢夺的现象会非常明显。而其中玩家移动是最消耗资源的功能。在每一帧中移动的数据都需要同时广播给其他的玩家。这样其他的玩家才能看到这个玩家在移动。
如果屏幕内有1千个玩家,哪么就需要广播1千次。相当于每次移动的数据都放大了1千倍。而移动同步的频率通常在每秒1次到60次。同步频率越高在客户端表现越细腻。如果每秒同步频率是1次,哪么每个用户每秒钟就要发送一次千人的广播。1千个用户在服务器一共要发送1百万次的同步信息。也就是说移动同步信息如果不加限制,哪么将会成指数级别的增加。
每秒消息总数量=同步频率* (提交消息数量+(玩家数量)2)
在实际应用中因为受到屏幕的限制,地图远处的玩家并不需要返回给客户端。因为即使返回了也看不到。所以会采用9宫格的方式对返回的数据加以过滤。也就是将地图划分为多个正方形的格子。每次只返回包括当前格子和周围共9个格子的玩家总数。像魔兽世界这样的扁平地图就可以采用这样的方式。游戏服务器的地图格子会比较大,通常在10米到50米左右。而高度不固定能达到100米甚至更高。