zoukankan      html  css  js  c++  java
  • 多人网络(Valve开发文档翻译[起源引擎])(一)

    原文地址 https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

      基于起源引擎的多人游戏使用了客户端-服务端网络结构。通常情况下,服务器是一个运行游戏的专有主机,能够进行游戏世界模拟、游戏规则判定以及用户输入处理。客户端是指连接到游戏服务器的玩家电脑。客户端和服务端通过高频发送小数据包来通信(通常频率为每秒20至30个包)。客户端从服务端收取当前世界状态,并根据这些更新来进行音视频输出。客户端也会对输入设备(键盘、鼠标、麦克风等)进行信号采样,并将这些输入信息发送回服务端以做进一步操作。客户端只会跟服务端通信,而彼此之间不会(在有些如P2P应用中则不同)。与单人游戏不同,多人游戏必须处理由基于包的通信所引发的一系列新问题。

      网络带宽是有限的,因此服务端不可能将每个微小的世界更新发送给所有客户端。取而代之,服务端会以一定的频率对当前世界状态截取快照,并将这些快照广播给客户端。网络包在服务端和客户端之间传递会花费一些时间(即ping值),这意味着客户端总是会比服务端慢一拍。此外,用户输入数据包在发回服务端时同样会有延迟,因此服务端处理的是延迟的用户命令。另外,每个客户端会因其他后台传输和帧率差异而有不同程度的延迟。这些客户端和服务端之间的时间差异将引发出逻辑问题,并会随着网络延迟的增大而愈发严重。在快节奏动作游戏里,几毫秒的延迟都会造成卡顿的感觉,让玩家很难击中其他玩家或者与移动物体进行交互。除了带宽限制和网络延迟,网络丢包也会造成信息缺失。

    Time differences between client and server

      为了解决这些网络通信问题,起源引擎在服务端引入了诸如数据压缩和滞后补偿之类的技术。这些东西在客户端是不可见的。客户端则进行预测和插值来提升体验。

  • 相关阅读:
    java实现扑克牌排列
    java实现扑克牌排列
    java实现扑克牌排列
    java实现扑克牌排列
    java实现扑克牌排列
    java实现平面点最小距离
    java实现平面点最小距离
    java实现拍7游戏
    java实现拍7游戏
    using_where, Using temporary ,using_filesort 分享
  • 原文地址:https://www.cnblogs.com/seancheung/p/3990939.html
Copyright © 2011-2022 走看看