关于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 程序员都 ...
- 关于imx6核心板qt系统U盘挂载
在使用imx6核心板开发的时候,程序写到U盘,想通过U盘在板子上运行程序,U盘插到板子上后在minicom中有信息显示,但是无法找到挂载文件,/dev和/mnt下都没有找到相应的文件.后来百度后发现U ...
- 注册表删除chrome插件
注册表,对于绝大部分人来说,都是一个比较陌生的东西.然而,我们的几乎所有软件都会在这里出现. 就最近一次,公司给每个员工的chrome浏览器绑定的一堆插件,并且无法删除.手动删除插件文件后,重启机器又 ...
- bzoj1877: [SDOI2009]晨跑
挺裸的最小费用最大流... #include<cstdio> #include<queue> #include<cstring> #include<iostr ...
- mysql if 和 case when 用法 多个when情况用一个语句 存储过程
在实际开发中,经常会用到 if 和 case when的用法,记录一下,以后可以用得到. DELIMITER $$ USE `数据库`$$ DROPPROCEDUREIFEXISTS `GetNoti ...
- [反汇编练习] 160个CrackMe之007
[反汇编练习] 160个CrackMe之007. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- vim 支持 markdown 语法
/************************************************************************* * vim 支持 markdown 语法 * 说明 ...
- I.MX6 bq27441 driver porting
/************************************************************************** * I.MX6 bq27441 driver p ...
- 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目
[题目链接:HDOJ-2952] Counting Sheep Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- linux下无线网卡的ioctl 接口
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/ba ...