• 常见网络游戏同步方式


    一、为什么需要有同步呢?

    同步机制是用来维护游戏的一致性,通俗的说就是虚拟世界中的事实;比如在CF中,大家的PING都很高,A和B两个玩家同时发现了对方,并向对方开火,如果没有很好的同步机制,那么A玩家的显示B还没有开枪就被击中,而B的屏幕上显示玩家A还没有开枪就被杀死,这就出现了不一致的问题,那么这个游戏就没法正常玩了。

    延迟是造成不一致问题的主要原因。如果延迟都为0,那么也就不存在不一致的问题了,就像在真实世界中一样。而同步机制除了基本的通信作用外,最重要的任务就是解决不一致问题。为了保证游戏的一致性,根据游戏类型、技术条件的不同,选择的同步方式也会不同。

    二、同步方式的基本思路

    其实最容易实现同步的游戏应该就是回合制游戏了;同步机制还是采用了回合的思想,像目前的即时游戏,其实也是由许多时间跨度非常短的回合(turn)组成的,由于人眼的记忆时间是0.1秒,在回合跨度小于这个时间的游戏里,玩家是感受不到有回合的感觉的。

    图中是A、B、C三个玩家的时间轴,虚线划分出来的是每一个turn的时间片(一个回合),假如说A、B、C这三个玩家是敌对的,在某一个turn,A发出了攻击B的指令、B发出了攻击C的指令,C发出了攻击B的指令;那么在这个turn结束后开始计算(由于turn的时间跨度很小,玩家难以觉察出延迟),游戏里的表现就是:在同一时间角色A攻击了B,角色B和角色C相互发生了攻击。

     

     

    常见游戏网络同步方式

    C/S同步方式:

    (C是客户端,GSS是服务端)

    优点:服务器实现整套游戏逻辑,安全性高。计算都是在服务器上,客户端的逻辑运算压力低;客户端可以进行预处理一些内容,客户端本地的即时性相对较高。

    优点:服务器实现整套游戏逻辑,安全性高。计算都是在服务器上,客户端的逻辑运算压力低;客户端可以进行预处理一些内容,客户端本地的即时性相对较高。

     

    缺点:服务器和客户端需要进行所有的数据交互和同步,导致网络流量大;服务器的计算压力大,承载的能力受到限制;由于需要通过服务器中转,导致不同客户端之间的即时性较差;由于C/S 架构数据是以服务器为准,那么本地可能会和服务器的不同,导致玩家看到的和最终结算的结果不同。

     

    适用的游戏:大型的MMORPG网游等不需要对操作响应要求极高的游戏,同屏内没有大量的需要快速响应的单位的游戏;需要服务器强校验的游戏。

    帧 同步方式:

    (FrameServer 用来同步的服务器,ArenaServer是在客户端的表现以及计算逻辑)

    优点:服务器仅作转发逻辑,承载压力低;客户端与服务器仅需要传递同步的数据,网络流量少;所有的计算逻辑都在客户端,服务端和客户端的开发关联度低,便于开发。

     

    缺点:相对与C/S结构来说,帧同步的逻辑都在客户端,安全性理论上会较弱,但是可以通过对比各个客户端每帧的checksum检查某个客户端是否存在不同,然后做出是否作弊的判定。针对多人帧同步游戏,通过对每帧数据的检测可以很好的保证游戏安全性,所以多人帧同步游戏一般安全性会很好。

     

    适用的游戏:需要对操作响应要求较高的游戏,且同屏之内有大量需要快速响应的单位类似dota2,星际等。同时玩一局游戏的人不多。

    戏的人不多。

    P2P同步方式:

     

    (C是客户端,GSS是服务端)

    优点:服务器仅作转发逻辑,承载压力低;客户端与服务器仅需要传递同步的数据,网络流量少;所有的计算逻辑都在客户端,服务端和客户端的开发关联度低,便于开发,客户端之间的延迟低。

     

    缺点:逻辑都在客户端,导致容易被攻击;不容易做安全性校验;且只能适合少量的类似局域网的用户。

     

    适用的游戏:需要对操作响应要求极高的游戏,类似QQ飞车,FPS类游戏等;同时玩一把游戏的人不多,理论上来说不适合用来做网络游戏的方案,因为容易被外挂攻击。

     

     *转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

  • 相关阅读:
    366. Find Leaves of Binary Tree输出层数相同的叶子节点
    716. Max Stack实现一个最大stack
    515. Find Largest Value in Each Tree Row查找一行中的最大值
    364. Nested List Weight Sum II 大小反向的括号加权求和
    156. Binary Tree Upside Down反转二叉树
    698. Partition to K Equal Sum Subsets 数组分成和相同的k组
    244. Shortest Word Distance II 实现数组中的最短距离单词
    187. Repeated DNA Sequences重复的DNA子串序列
    java之hibernate之基于主键的双向一对一关联映射
    java之hibernate之基于主键的单向一对一关联映射
  • 原文地址:https://www.cnblogs.com/nothx/p/8531897.html
Copyright © 2020-2023  润新知