0:虚幻引擎网络架构

摘要:
虚幻引擎的网络架构由Tim Sweeney编写。这样,大规模网络是可能的,游戏服务器可以出现在整个网络上。虚拟引擎客户端的定义:客户端总是类似于服务器状态的模拟,类似于服务器,但服务器必须对其进行监控和同步。那么,虚幻的网络架构如何在最复杂的射击游戏中以自己的架构处理好网络呢?

虚幻引擎的网络架构这篇文章是Tim Sweeney书写的。我将在这里对自己读取到的内容进行注解和分析。

1.为什么要研究虚幻网络概述?

虚幻网络概述的组织性适合射击类型游戏,射击类型游戏具有极高的网络反馈才能支持快节奏的游戏进行下去。虚幻的网络架构就是按照这个目的展开的。自己写固然好,但是使用虚幻引擎,虚幻好才是真的好:)

2.又是历史原因

从非常早的Doom和《毁灭公爵》支持了Peer to Peer P2P网络功能,即点对点的游戏模式。在这种网络架构下每一个机器都是对等的,例如我按下了空格键,你的机器上也会同步我的信息,反之亦然。所有的信息都要进行复制,这很明显要进行大量的数据交换,效率并不高。

大神John Carmark在《雷神之锤》中采用了客户端-服务器的方式。一个机器作为“服务器”,负责所有的游戏性决定。而“客户端”只负责渲染,玩家在客户端的按键信息都交给服务器进行决断。

采用这种方式使大规模网络成为可能,游戏服务器可以在整个网络上出现。随后《雷神之锤2》进行了扩展,让客户端可以预判断服务器的行为,另外注入物理模拟也可以交给客户端自己去干。但是这样做可能会导致客户端和服务器端有微小的差异。因此引入了锁步预测协议。

3.Tim Sweeney是怎么开始架构虚幻的呢?

广义的客户端-服务器模型Generalized Client-Server model。他赋予了客户端更多的权利,事实上许多逻辑性内容都交给客户端自己去做,而服务器端起到了督导的作用,两个机器之间频繁的交换数据即可。服务器使用复制Replication Actor的方式将世界信息发送给客户端。除此之外你能看到Epic Games 的UE4教程中有一个Blueprint教程系列,在这里有Actor复制,函数复制,变量赋值。就这样一直沿袭了下来。

4.开始详细研究虚幻网络架构前的内容说明和定义

什么是服务器?在虚幻引擎中对服务器的定义是:由关卡中所有Actor的变量集合所定义。服务器控制着游戏性流程,所以服务器状态才是一个真正的游戏状态。

虚幻引擎客户端的定义:客户端总是近似于服务器状态的模拟,近似于服务器但得需要服务器对其进行督导和同步。这个定义非常重要!存在于客户端机器上的对象,不能被当做代理。例如你玩我的游戏,你的玩家角色仅仅是对象的临时近似,而不是对象。

5.理想网络带宽状况下的执行逻辑,我们将服务器所有控制游戏的状态信息传递给客户端

一般理想情况下,在游戏代码Tick结束的时候,将所有需要同步复制的信息发送给每个客户端即可。但是Internet 28.8k的调制解调器,仅能满足1%的带宽来传递完整的精确更新信息。

做网络游戏最重要的准则:永远不会存在有足够的带宽来满足完全的游戏更新复制整个游戏状态从服务器端到客户端。

那么虚幻网络架构凭什么能在最为复杂的射击类游戏中,采用自己的架构将网络处理的那么好呢?等有时间再继续下一篇吧。

免责声明:文章转载自《0:虚幻引擎网络架构》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#3.0入门系列(九)之GroupBy操作MySQL笔记——用户管理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WebSocket实战

前言 互联网发展到现在,早已超越了原始的初衷,人类从来没有像现在这样依赖过他;也正是这种依赖,促进了互联网技术的飞速发展。而终端设备的创新与发展,更加速了互联网的进化; HTTP/1.1规范发布于1999年,同年12月24日,HTML4.01规范发布;尽管已到2012年,但HTML4.01仍是主流;虽然 HTML5的草案已出现了好几个年头,但转正日期,遥...

API接口之安全篇

APP、前后端分离项目都采用API接口形式与服务器进行数据通信,传输的数据被偷窥、被抓包、被伪造时有发生,那么如何设计一套比较安全的API接口方案呢? 一般的解决方案如下: 1、Token授权认证,防止未授权用户获取数据; 2、时间戳超时机制; 3、URL签名,防止请求参数被篡改; 4、防重放,防止接口被第二次请求,防采集; 5、采用HTTPS通信协议,防...

Photon——Application LoadBalancing 负载均衡应用

Application - LoadBalancing 负载均衡应用        This article explains the server-side implementation of the LoadBalancing application.      本文解释服务端是如何实现LoadBalancing应用程序的。   Content...

nginx upstream模块

upstream模块 upstream模块 (100%) nginx模块一般被分成三大类:handler、filter和upstream。前面的章节中,读者已经了解了handler、filter。 利用这两类模块,可以使nginx轻松完成任何单机工作。而本章介绍的upstream,将使nginx将跨越单机的限制,完成网络数据的接收、处理和转 发。 数据转...

Python接口自动化之cookie、session应用

在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请求, 介绍了post源码,data、json参数应用场景及实战。 以下介绍cookie、session原理及在接口自动化中的应用。 HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;...

CentOS5.x、CentOS6.x 使用NFS及mount实现两台服务器间目录共享

一、环境介绍: 服务器:centos 192.168.1.225 客户端:centos 192.168.1.226 二、安装: NFS的安装配置:centos 5 : portmap:实现RPC(协议)的应用程序 yum -y install nfs-utils portmap centos 6(在CentOS 6.3当中,portmap服务由rpcbin...