高防游戏服务器器与普通服务器有什么区别

中国领先的IT技术网站
51CTO旗下网站
游戏服务器:到底使用UDP还是TCP
一般来说你会听到人们这样说:“除非你正在写一个动作类游戏,否则你就用TCP吧” 或者是 “你能够在MMO游戏中用TCP,因为魔兽世界就用的TCP!”
作者:菜鸟浮出水 编译来源:伯乐在线| 09:51
在编写网络游戏的时候,到底使用UDP还是TCP的问题迟早都要面对。
一般来说你会听到人们这样说:&除非你正在写一个动作类游戏,否则你就用TCP吧& 或者是 &你能够在MMO游戏中用TCP,因为魔兽世界就用的TCP!&
遗憾的是,这些观点都没有反映这个问题的复杂性。
首先,说明一下,我之前主要是用TCP进行网络编程。我曾为一个流行的在线纸牌游戏编写服务器了好几年,在高峰期我们的每台服务器能够承受个连接(同一台物理机器上有多个服务器进程在跑)都没有问题。在我来看,TCP是一种安全而且常见的选择。
尽管如此,我们最新的项目却是使用UDP协议,而且我们的项目无法通过任何方式在TCP下工作。事实上,项目一开始使用的TCP,但是后来发现我们使用TCP无法达到我们需求的连接数量时,我们只能换成UDP了。
在使用中TCP表现怎么样呢
从原理上,TCP的优势有:
简单直接的长连接
可靠的信息传输
数据包的大小没有限制
任何一个和TCP打过交道的人都知道,要实现一个稳定的TCP网络连接,需要处理各种隐藏的坑,比如断线检测、慢速客户端响应阻塞数据包,对开放连接的各种dos攻击,阻塞和非阻塞IO模型等等。
除了上面列出的这些问题外,一个好的TCP模块确实不好编码实现。
但是,TCP最糟糕的特性是它对阻塞的控制。一般来说,TCP假定丢包是由于网络带宽不够造成的,所以发生这种情况的时候,TCP就会减少发包速度。
在3G或WiFi下,一个数据包丢失了,你希望的是立马重发这个数据包,然而TCP的阻塞机制却完全是采用相反的方式来处理!
而且没有任何办法能够绕过这个机制,因为这是TCP协议构建的基础。这就是为什么在3G或者WiFi环境下,ping值能够上升到1000多毫秒的原因。
为什么不用UDP
UDP相对TCP来说既简单又困难。
举个例子来说,UDP是基于数据包构建,这意味着在某些方面需要你完全颠覆在TCP下的观念。UDP只使用一个socket进行通信,不像TCP需要为每一个客户端建立一个socket连接。这些都是UDP非常不错的地方。
但是,大多数情况下你需要的仅仅是一些连接的概念罢了,一些基本的包序功能,以及所谓的连接可靠性。可惜的是,这些功能UDP都没有办法简单的提供给你,而你使用TCP却都可以免费得到。
这也是人们为什么经常推荐TCP的原因。在用TCP的时候你可以不考虑这些问题,直到你需要同步连接的数量级达到500以上的时候。
所以,是的,UDP没有提供所有的解决方法,但是就像你看到的那样,这也正是UDP好用的地方。在某种意义上来说,TCP对UDP就好比是Hibernate和手写SQL的区别。
使用TCP失败的地方
人们经常给你建议,让你去使用TCP,比如&TCP跟UDP一样快&或者&游戏X用TCP如此成功,所以TCP当然是首选&,然而,他们完全没有理解为什么在那个特定的游戏中TCP是有效的,为什么UDP不按照顺序发送数据包呢?
那么为什么魔兽世界采用TCP呢?首先我们需要解释这个问题。这个问题其实是&为什么魔兽世界有的时候1000毫秒以上的延迟还能够运行?&这是TCP的性质决定的,在发生丢包的时候,会产生巨大的延迟,因为TCP首先会去检测哪些包发生了丢失,然后重发所有丢失的包,直到他们都被接收到。
可靠的UDP也是有延迟的,但是由于它是在UDP的基础之上建立的通信协议,所以可以通过多种方式来减少延迟,不像TCP,所有的东西都要依赖于TCP协议本身而无法被更改。
就这一点来讲,一些人要开始提到Nagle算法了,实际上它是你在实现任意一个对延迟敏感的TCP模型时首先需要禁止使用的。
那么魔兽世界以及其他的一些游戏是怎么处理延迟问题的呢?
方法也很简单,他们能够隐藏掉延迟带来的影响。
在魔兽世界中,玩家和玩家是无法碰撞的:因为这类碰撞是无法通过一些预测来处理的,但是玩家和环境之间的碰撞却是可以通过预测来处理的,所以这里使用TCP是没有问题的。
我们来看一下魔兽世界的战斗就会发现,玩家的攻击指令发送给服务器的操作是放在比如&attack_entity(entity_id)&或者&cast_spell(entity_id, spell_id)&的接口中来做的,换句话说,瞄准操作是独立于进行的。如此一来,一些类似发起攻击动作和释放技能特效就能够在没有收到服务器确认的情况下就直接执行,比如展现冰冻技能的效果就可以在服务器没有返回数据前在客户端就做出来。
客户端直接开始进行计算而不等待服务端确认是一种典型的隐藏延迟的技术。
几年前,我为一个叫&Five Card Jazz&的纸牌游戏编写过客户端。它使用的是http协议,它比直接的TCP协议连接的延迟更加严重。
我们用简单的纸牌绘制和抽牌的动画来掩盖延迟的问题,所以延迟的问题只在非常糟糕的连接下才会被看出来。这种方法也非常的典型:发送请求的同时开始播放牌桌的动画,一直播放翻动最后一张牌直到接收到了服务端传回来的数据为止。魔兽世界的战斗特效就是使用类似的原理。
这也意味着,我们到底是使用TCP还是UDP取决于我们能否隐藏延迟。
TCP在什么时候失效
一个采用TCP的游戏必须能够处理好突发的延迟问题(纸牌客户端就很典型,对突发性的一秒的延迟,玩家也不会产生什么抱怨)或者是拥有缓解延迟问题的好方法。
但是如果你运行的是一个无法使用任何减缓延迟措施的游戏呢?玩家对玩家的动作类游戏通常就属于这个范畴,但是这也不仅仅限于动作类游戏。
举个例子:
我目前正在写一个多人游戏(War Arcana)。
一种常见的操作是,你快速的移动你的角色通过一张充满战争迷雾的世界地图,但是一旦你探索过,迷雾就会被打开。
为了确保游戏的规则,防止玩家作弊,服务器只能显示玩家当前位置附近的信息。这意味着不像魔兽世界,玩家无法在没有得到服务器响应的情况下,做出完整的动作。和Five Card Jazz相比,我们即使允许500毫秒的延迟,也已经非常困难了。
在实现了游戏的原型后,在局域网内一切都进行的非常顺利,但当我们在WiFi环境下测试时,操作会间歇性的卡起来或者延迟高起来。写了一些测试程序之后发现,WiFi环境下偶尔会发生丢包行为,每当发生丢包的时候,服务器的响应速度就从100-150毫秒上升到毫秒。
没有任何办法可以绕过TCP的这个设置来避开这个问题。
我们替换了TCP的代码,用了自定义的可靠的UDP来实现,把大量的丢包产生的延迟降到了仅仅只有50毫秒,甚至比以前TCP不丢包的情况一个来回的延迟还要小。当然,这只可能建立在UDP之上,这样我们才对可靠性拥有完全的掌控力。
困惑:可靠的UDP只是TCP的一种简单的实现?
你有没有听过这种说法:&可靠的UDP就像TCP一样,所以还是用TCP吧&。
问题是这种说法是错误的。可靠的UDP一点也不像TCP,要去实现一个特殊的阻塞控制。事实上,这也是你使用可靠UDP代替TCP的最大的原因,避免TCP的阻塞控制。
另一个重点是可靠的UDP的可靠性是如何保证的。这里有很多种方法去实现。我非常喜欢Quake3网络库代码里的一些想法,它们也激发了我在War Arcana中使用UDP协议。
你也可以使用许多支持可靠通信的UDP库,当然,这样在可靠性方面,相比自己手动实现全部的代码而言,可能会更加通用而失去了一些性能优势。
那么到底是用UDP还是TCP呢?
如果是由客户端间歇性的发起无状态的查询,并且偶尔发生延迟是可以容忍,那么使用HTTP/HTTPS吧。
如果客户端和服务器都可以独立发包,但是偶尔发生延迟可以容忍(比如:在线的纸牌游戏,许多MMO类的游戏),那么使用TCP长连接吧。
如果客户端和服务器都可以独立发包,而且无法忍受延迟(比如:大多数的多人动作类游戏,一些MMO类游戏),那么使用UDP吧。
这些也应该考虑在内:你的MMO客户端也许首先使用HTTP去获取上一次的更新内容,然后使用UDP跟游戏服务器进行连接。
永远不要害怕去使用最佳的工具来解决问题。
原文链接:&&&&翻译:&-&
译文链接:&
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条热点头条原创
24H热文一周话题本月最赞
讲师:782758人学习过
讲师:228052人学习过
讲师:91259人学习过
精选博文论坛热帖下载排行
本书采用“如何解决问题”的方式阐述Ruby编程,涵盖了以下内容:Ruby术语和基本原理;数字、字符串等低级数据类型的操作;正则表达式;国际...
订阅51CTO邮刊拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3b88ea1b884c438e-ua98).
重新安装浏览器,或使用别的浏览器方舟生存进化官方服务器与私人服务器有什么区别_
我的位置:>>>
方舟生存进化官方服务器与私人服务器有什么区别
发布时间: 09:25 () 作者:sheng 编辑:墨非
方舟生存进化中的小伙伴们在玩联机的时候一定会困惑,该玩官方服务器还是私服,两者之间又有什么区别?下面就给大家带来一篇官服与私服的区别的详解,来帮助大家更好地做出选择。
1:官服私服什么区别?
答:官服为官方架设,私服为玩家个体或媒体或其他组织架设。
理论上:官方更有保证,毕竟是官方自己架设,有舆论压力,而私服则看个人意志&&我今天乐意玩我架个服务器,你们都来玩,明天我不高兴,我不玩了,那么抱歉&&你们的存档就&&
实际上:官方很难挤进去,尤其是人数5以上的大团队,掉线一次挤服务器是个灾难。尤其是PING低不丢包的官服,同时相对来讲PVE服务器要比常规PVP服务器更好挤一点。私服则有很多主播及个人、组织架设服务器,国内也不少,所以相对PING和丢包率都有保证,但如果您打算长期玩下去到60级,那么请跟服主保持良好关系,否则服主不开心会删你的存档,服主被吵架就清掉这个服务器存档也不是没有人做过。
2:关于私服。
刚才有提到非官方的私服更稳定,简单说几个关于私服的常见问题。
私服为什么突然掉线,服务器就消失了?:主要是服务器更新为主。这里的机制是:
游戏处于测试阶段,问题多多。官方团队彻夜抢修努力修复BUG并且优化游戏(5毛到手),这样就需要游戏版本号更新,比如从开服的150到160再到170、170.46、170.47、171.0等。
而这个时候,首先需要你更新的就是你steam库里面的游戏版本。而如果私服没有第一时间更新,可能会出现无法在官方的服务器搜索里找到版本号过低的服务器,甚至可能会根本看不到低版本的服务器。而服务器神秘时候更新,更新多久,什么时候开?去服主YY问吧&&否则只能等,没有边际的等待。
顺便提一笔,弹弓矛弓的准星,M键地图显示自己,以及服务器很多细节设定都是在服务器的时候添加参数,所以这些东西并非是官方更新的,而是服主自己选择启用的。
关于私服的更新:
首先找到一个稳定的私服,与服主保持良好的关系以获取服务器的更新、等信息。而仍然无法避免存档被删除的问题。官方有些设计到游戏内物品参数修改、合成配方、等比较大的改动,可能会要求服务器清除存档,此时就算官方服务器更新也一样会删除存档。私服不更新?过几个版本可能会无法检索到该服务器,或无法加入服务器。
简单说:官方要你删档,你就得删档。无论官服私服。至于恢复存档的方法也有,但非常非常麻烦,用到的不多。比较大多数私服不是自己买来服务器架设的,而是租用的,卖家租给你服务器,你钱拿到了,太麻烦的事儿人家不太喜欢给你弄。
国内服务器大多架设在浙江、广东、广州。上海北京也有些,但不多。所以北方、偏远的同学高是避免不了的。但:不丢包就行。
丢包具体体现在:龙瞬移。
如果结合高延迟+丢包一起体现,就是:龙如同sb一般,AI低,转身慢。
举个具体点的栗子:三角龙在高延迟+丢包的官服或者私服里面,你用斧子打屁股,跟着他一起转向,无伤艹所有三角龙,而且不太容易触发他召唤同伴。1级出门在鳄鱼旁边,骑上后背无脑左键,也是无伤打,非说有伤害就是你拳头反伤但打死了鳄鱼,肢解尸体的时候你会发现自己血量太低骨折(笑。
反正在这种情况下龙的AI和转身速度,以及很多方面都会被弱化。如果说高延迟+丢包不稳定服务器(即使不掉线),是普通难度,那么一个流畅的服务器简直是噩梦。。
(说实话其实就算流畅,为了照顾很多新手,龙的AI和难度还是很低,除了大批的迅猛龙和牛龙很危险,其他情况下基本没危险)更多精彩尽在 专题:
ARK: Survival Evolved
发行商:Studio Wildcard
平台:PC,PS4,XBOXONE
类型:动作角色扮演(ARPG)
发售日期:日高速缓存数据库
So Easy....
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
既然是不同的服务器之间进行通信,怎么可能会是具有亲缘关系的进程呢?
管道通信和通信中的半双工信道的进程通信机制相似,一个管道虽然可以实现双向的数据传输,但是同一时刻最多只能存在一个方向的传输,不能两个方向同时进行。
管道通信类似于通信中半双工信道的进程通信机制,一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行
谁能给出一个完美的解释呢
管道通信和通信中的半双工信道的进程通信机制相似,一个管道虽然可以实现双向的数据传输,但是同一时刻最多只能存在一个方向的传输,不能两个方向同时进行。管道通信和通信中的半双工信道的进程通信机制相似,一个管道虽然可以实现双向的数据传输,但是同一时刻最多只能存在一个方向的传输,不能两个方向同时进行。
管道类似于半双工通信,虽然可以实现双向的通信,但是在同一时间只能有一个方向进行
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
浙ICP备号-2
扫一扫,把题目装进口袋

我要回帖

更多关于 游戏本和普通本的区别 的文章

 

随机推荐