实时在线游戏服务器客户端交互总结

1. 服务器是数据路由还是逻辑控制?
l 两种服务器都有合理性,选型主要看游戏类型
l 典型的数据路由服务器:暴雪的BN/浩方/vs
l 典型的逻辑控制服务器:各类mmorpg/slg
l 两类服务器对比:
数据路由型  逻辑控制型 
客户端开发难度  高  中 
服务器开发难度  低  高 
网络稳定性要求  高  低 
游戏升级难度  高  低 
可互动玩家数  少  多 

 

2. 逻辑控制型网游的实现要点:
l 追影算法:除了当前客户端控制的玩家外,其他玩家或者npc的位置是靠客户端追服务器端的影子,不要怕追不上,因为不是每个玩家都是走直线。
l 数据适当丢弃:同种类型的数据受到多个,客户端可以只处理最后一个,其他丢弃
l 每个游戏对象的同步数据可以包括:位置/状态/命令,同步间隔可以任意。但是不要把所有对象同质化处理,有些对象需要每秒发送几次位置数据,有些对象可以从不发送位置数据,需要根据具体情况进行选择。
l 客户端和服务器可以包含相同的游戏逻辑,但客户端逻辑只用于快速响应事件,当服务器的同步信息到达后,要优先以服务器的指令为准。
l 玩家间画面不同步是必然发生的事情,及时纠正过来才是关键点,纠正过程中产生一下奇怪的动作请理解为正常。
l mmorpg一般不做角色碰撞处理,除了防止玩家“堵门”外,也是规避服务器端碰撞的实现难度。而且客户端碰撞和服务器碰撞结果很难一致也会造成大量的不一致状态。
l 如果需要碰撞检查尽量由客户端进行检查,这里有个原则就是每个客户端只检查本地生成的物体,不检查由服务器生成的物体。之后把检查结果告知服务器即可。
l npc的走位如何适应地形是难点,服务器端可以简单识别地图中的墙壁,但是很难识别小且单独的碰撞体(这主要出于工作量的考虑)。魔兽世界中猎人可以单刷围栏可以证明这点,boss可以识别地形,但是无法走上小箱子,说明魔兽世界中客户端场景和服务器场景只是类似而不相同。
l 玩家无法进入一些空间,比如墙壁,这个是由客户端实现的。但是服务器需要对此做简单校验,比如玩家作bi进行穿墙操作,服务器需要有能力将他拉回原位。
l  谁得利,谁发送数据
l 是同步状态还是同步命令,主要看是否有键盘操作还是鼠标操作
 
 

猜你喜欢

转载自zhangming04.iteye.com/blog/1759877