关于P2P架构的网络游戏
以下内容摘自《ActionScript大型网页游戏开发》
—————————————————————————————————————————————————————————
P2P架构
P2P架构是两个或多个客户端不经过服务器而直接通信的架构。可能首先会使用服务器以让客户端间能查找到对方,但在此之后就不再需要服务器了。具体也分两种不同的形式:一种是完整连接拓扑架构,指的是每个客户端与其他客户端之间都必须有连接,信息可以直接在用户间交换;另一种是环状拓扑架构,指的是信息只有流经一个或多个客户端后才能传递过来的架构。本文当谈到P2P架构时,指的是完整连接拓扑架构。
一般来说,P2P架构在游戏方面用的不多。很多情况下游戏似乎是在使用P2P架构,但实际上其中的一个玩家已被设定为主机来充当服务器的角色。然而,P2P架构非常适用于搭建文件共享网络。通过它,网络游戏经常能够高效地为玩家们发放游戏补丁(比如《魔兽世界》),这不仅减轻了Web服务器的负担,而且也加速了玩家下载补丁的速度。
与C/S架构相比,P2P架构技术有几个明显的优势,当然也存在几个缺点。先讲讲它的优点。
P2P架构的优点
延时较小。延时就是指信息在从发出到接收这个过程中所用的传输时间。在C/S模式中,信息是先从一个客户端传到服务器端,而后再从服务器端传到另一个客户端。但P2P架构则是让信息直接在两个客户端间传递,这样就比C/S模式减少了一半的传递时间。
不需要服务器端。既然P2P架构全是由客户端建成的,因此也就没必要使用服务器端。这对于无论是游戏开发者还是发布者来说都是一件好事,因为他们不用再为维持运行游戏中央服务器而支付主机托管和管理费了。
P2P架构的缺点
游戏的可扩展性差。当游戏的客户端相当少的时候,那就用P2P吧,因为它产生的延时很小且不需要使用服务器端。但是当游戏有很多客户端时,比如说成百或上千个客户端,那么P2P架构就不适用了。因为它需要每个客户端都和其他客户端保持一个独立的连接。那么如果有1000个客户端的话,完整拓扑架构就要求每一个客户端都要建立并维持1000个开放的连接,其中每一个客户端都要接受来自其他客户端发出的所有信息。而在C/S架构中,一个客户端只从服务器端接受经其职能筛选和归集后的信息。
另外,还要考虑一下此种网络的应用环境。假设你有1000个客户端,但是它们全都在学校的子网络中,1000个用户彼此相连导致产生了1000000个连接,这将会使网络因不堪重负而瘫痪。但是如果同样数目的连接放到全球互联网上,则根本不会出任何问题。
争议解决机制不健全。加入有个双人P2P游戏,每一方都能操纵鼠标去吃奶酪。玩家A接近第一块奶酪,然后确定离它足够近时就可以吃了它,于是玩家A因为吃了奶酪而获得了一定的积分,然后他传递信息给玩家B,告诉B:这块奶酪已经被我吃了。玩家B接收并处理了这条信息后从自己的屏幕上删除了那块奶酪,并且更新了玩家A的得分。谁都没有异议,两个客户端对当前游戏的状态达成了一致。
但比如说现在玩家A和玩家B都在对下一块奶酪跃跃欲试。不巧的是这一次他们相互之间逻辑决策的时间就差了几毫秒,双方都各自认定是自己吃了这块奶酪,然后都给自己加上了分,然后互发信息给对方证明是自己把奶酪吃了。结果两个玩家就会互不相让。
所以,P2P架构的一个缺点就是:没有中心逻辑决策者。还有一些范例更能说明问题。
ü 两个战斗到最后的玩家间互发了一个必杀技,谁先倒下?
ü 在赛车游戏中,谁第一个冲过终点?
ü 玩家争着抢地上的钥匙,哪一位先抢到呢?
处理此类问题最好的方法就是采用C/S架构,让服务器来维护游戏运行中的状态,充当逻辑决策争议的逻辑决策者。
P2P架构可通过选派一个客户端充当主机(但其本身还是P2P架构中的一个客户端)来解决逻辑争端,而这样做会带来下面两个新麻烦。
(1)如果所有重要的逻辑冲突都要通过充当主机的客户端来解决的话,那就丧失了对等网络架构的延时较低这个优点,因为信息要从客户端传到主机由其处理完后再传回客户端。
(2)P2P架构游戏本身存在安全隐患,因为所有的重要逻辑行为都运行在客户端而没有在一个中央结点得到验证。那么如果你把所有重要的逻辑决策权都交给主机的话,无疑会使这个特殊的客户端在理论上具有了某种控制能力上的优势(作弊的机会大大增加)。
关于P2P架构的网络游戏的更多相关文章
- Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据
转自:http://www.letiantian.me/2014-06-16-dynamo-algorithm-protocol/ Dynamo是Amazon的一个分布式的键值系统,P2P架构,没有主 ...
- Cassandra——类似levelDB的基于p2p架构的分布式NOSQL数据库
C: Consistency 一致性 • A: Availability 可用性(指的是快速获取数据) • P: Tolerance of network Partition 分区容忍性(分布式) 1 ...
- 转载:P2P技术原理及应用(2)
转载allen303allen的空间 在Gnutella网络中存在以下问题: 冗余消息多,对带宽的消耗存在一定的浪费.Gnutella网络协议采用泛洪式(Flooding)消息传播机制,这种消息传播机 ...
- [转]MMORPG服务器架构
MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...
- 转自邓凡平 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第七章 深入理解Wi-Fi P2P部分节选
本章主要内容: 介绍Wi-Fi P2P相关知识: 介绍Android中WifiP2pService.wpa_supplicant的相关代码. 7.1 概述 承接第6章介绍的WSC,本章将继续介绍Wi ...
- 互联网点对点通讯(P2P)
摘自: http://www.cnblogs.com/zhili/archive/2012/09/14/p2p_pnpr.html 很遗憾,目前看了下代码,我测试只是做到了本地p2p. [C# 网络编 ...
- Redis Cluster架构优化
Redis Cluster架构优化 在<全面剖析Redis Cluster原理和应用>中,我们已经详细剖析了现阶段Redis Cluster的缺点: 无中心化架构 Gossip消息的开销 ...
- P2P综述
原文参见:http://www.lotushy.com/?p=113 [TOC] 什么是P2P P2P全称是Peer-to-peer.P2P计算或P2P网络是一种分布式应用架构.它将任务或负载分发给P ...
- 使用Go语言编写区块链P2P网络(译)(转)
转自:https://mp.weixin.qq.com/s/2daFH9Ej5fVlWmpsN5HZzw 外文链接: https://medium.com/coinmonks/code-a-simpl ...
随机推荐
- PHP优化杂烩
讲 PHP 优化的文章往往都是教大家如何编写高效的代码,本文打算从另一个角度来讨论问题,教大家如何配置高效的环境,如此同样能够达到优化的目的. pool 一个让人沮丧的消息是绝大多数 PHP 程序员都 ...
- java--面向抽象编程
所谓面向抽象编程是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,及所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象.就是利用abstract来设计实现用户需求. 比如:我 ...
- arcgis engine 开发教程系列
版权声明: <ArcGIS Engine+C#实例开发教程>为3SDN(http://www.3sdn.net)原创教程,版权所有.禁止商业用途转载(如需请联系作者),非商业 ...
- ConcurrentDictionary的ToDictionary
如果Value是引用,那么在使用Value.Clear()的时候.会清空Value的所有元素,但是不会改变Value的引用 private static void Main() { try { var ...
- python 字符串换行的三种方式
if __name__ == '__main__': #第一种: 三个单引号 print ''' aaaaaaaaaaaaaaaa bbbbbbbbbbbbbb''' #第二种: 三个 ...
- Android开发之权限列表
权限定义 功能 android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问"properties"表在checkin数据库中,改值可以修 ...
- zlib用法说明
1. 如何获得zlib zlib的主页是:http://www.zlib.net/ 2. 用VC++6.0打开 把 下载的源代码解压打开,VC6.0的工程已经建好了,在\projects\visual ...
- springMVC传对象参数、返回JSON格式数据
假如请求路径:http://localhost/test/test.do?user.id=1 后台接收参数的方法如下: @RequestMapping("/test") publi ...
- Jqgrid入门-别具特色的Pager Bar (四)
Pager Bar位于表格最下边.默认情况下,分为三部分.如图: 第一部分:导航按钮栏(Navigator) 第二部分:页码栏(Pager) 第三部分:记录信息栏(Record) 要实 ...
- [swustoj 373] Antiprime数
Antiprime数(0373) 问题描述 如果一个自然数n(n>=1),满足所有小于n的自然数(>=1)的约数个数都小于n的约数个数,则n是一个Antiprime数.譬如:1, 2, 4 ...