【技术贴分享】MMOG网络同步算法揭底(
发布时间: 2013-10-25 14:36:53 作者: rapoo
【技术贴分享】MMOG网络同步算法揭秘(QQ幻想)
[解决办法]
帮顶一下。。
[解决办法]
个人观点:其实MMORPG对同步的要求精度并不高(举个例子,梦幻西游,人物位置在两台机器上显示的不一致这太正常了),ARPG的可能会高一点(这个高一点体现在,近战职业在攻击时的攻击距离有异常,这个可以通过人物停止移动/攻击释放技能时,发一个修正坐标解决)
人物的移动:玩家是客户端寻路(NPC是服务器自己寻路,甚至是直接设置好巡逻路径),寻出一条路径,包括若干个拐点。客户端告诉服务器要移动的下一个拐点,服务器验证当前位置到这个拐点的直线路程是否可行,对于不可行的有的是服务器告诉客户端一个该条直线上可以到达的最终点,或者是不允许移动,服务器验证拐点通过,告诉客户端开始移动,服务器跟客户端同时开始向这个拐点移动,客户端到了之后再发下一个拐点
[解决办法]
汗 太想当然了 你设想一下吧,玩家按一个键往前,服务器接到往前的指令,然后运算出新位置后通知客户端,你必然存在两种情况:要是客户端等待响应,那么移动一点也不顺畅,就算你一秒10个指令收发也没用。所以你客户端必须在服务器响应前就往前跑,但是这样就会发生回扯,也就是说,你这边到新位置了,服务器却告诉你一个旧位置,你听还是不听?这玩意跟拐点没什么关系,就算直线也一样。因为你根本无法预测用户什么时候会把向前的按键松开
预测以及回滚我觉得是程序里头最黏糊糊的东西,最头痛,最难写
[解决办法]客户端等待服务器响应 在正常的网络环境下 算上你服务器逻辑的处理时间 应该在1-2帧之内(按60fps算,就是约66-130毫秒)以内返回 如果达不到这个标准 只能说是你服务器处理能力慢了
而如果是网络环境卡 延迟好几百 甚至是好几秒 那这你怎么处理都是卡的 没有讨论的必要
然后现在的MMO,鼠标操作的情况下,到了一个拐点,才会发下一个移动指令,不可能你每移动一步都发一个移动指令的。
对于支持键盘操作的移动,这是没有寻路,也就是说你没法预测下一个拐点,此时客户端是提交运动方向给服务器,然后在转向时再提交一次移动方向给服务器,两次转向之间不再发移动指令了,服务器验证这个移动方向是不是可行