zoukankan      html  css  js  c++  java
  • 常见网络游戏同步方式

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

    同步机制是用来维护游戏的一致性,通俗的说就是虚拟世界中的事实;比如在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)

  • 相关阅读:
    Shader编程学习笔记(七)—— Surface Shader 1
    Shader编程学习笔记(六)—— Fixed Function Shader 2
    Shader编程学习笔记(五)—— Fixed Function Shader 1
    Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
    Shader编程学习笔记(三)—— 三大主流编程语言 HLSL/GLSL/Cg
    Shader编程学习笔记(二)—— Shader和渲染管线
    Shader编程学习笔记(一)—— 图形硬件简史与可编程管线
    响应式布局简明示例
    sass笔记一(安装)
    bootstrap常用
  • 原文地址:https://www.cnblogs.com/nothx/p/8531897.html
Copyright © 2011-2022 走看看