如果加速 UDP 数据的话费开通游戏加速器的话,有什么好的解决方案

从《王者荣耀》来聊聊游戏的帧同步
这是王者荣耀技术分析系列第二篇,有兴趣请持续关注。
2、从《王者荣耀》来聊聊游戏的帧同步
3、游戏服务器的架构演进
农药自从上线以来,依靠着强大的产品力以及腾讯的运营能力,在游戏市场上表现可谓是风生水起,根据第三方的调研数据显示,《王者荣耀》渗透率达到22.3%,用户规模达到2.01亿人,每日的日活跃用户(DAU)均值为5412.8万人。 如此可观的数据,令人十分钦佩。
当然,作为技术人,更愿意从技术上了解去一些王者荣耀的实现原理和架构方式,从中找到新的知识领域,扩展自己的知识边界,丰富自己的专业技能。
借助这个游戏,这一篇我们来聊一聊王者荣耀的技术实现以及同步方式,更多的从MOBA(多人在线战术竞争游戏)方向来解析推理王者的实现方案,如若有分析的不尽的地方,欢迎一起探讨改进。
以下是主要讲解的几个重点:
服务器架构
  服务器架构
不难发现,王者荣耀的服务器采用房间模式,每个玩家登陆以后,然后进入大厅,进行匹配游戏。匹配完成之后,把一起对战的玩家放到一个房间内进行对战。
房间类玩法和MMORPG有很大的不同,在于其在线广播单元的不确定性和广播数量很小,而且需要匹配一台房间服务器让少数人进入一个服务器。
这一类游戏最重要的是其“游戏大厅”的承载量,每个“游戏房间”受逻辑所限,需要维持和广播的玩家数据是有限的,但是“游戏大厅”需要维持相当高的在线用户数,所以一般来说,这种游戏还是需要做“分服”的。而“游戏大厅”里面最有挑战性的任务,就是“自动匹配”玩家进入一个“游戏房间”,这需要对所有在线玩家做搜索和过滤,以及为了更好的体验,会对玩家进行分地区进行匹配,以方便获得更快速的同步。
一般的方式是玩家先登录“大厅服务器”,然后选择组队游戏的功能,服务器会通知参与的所有游戏客户端,新开一条连接到房间服务器上,这样所有参与的用户就能在房间服务器里进行游戏交互了。
  通信方式
说到通信方式,一般会有http和socket 两种方式,但http底层也是采用socket,只是每次通信完成以后都会断开,这种方式对于需要频繁交互的双方来说,显得效率太低了,所以一般实时要求高的游戏都是采用socket方式来通信。
可是sokect通信,又分为两种:TCP vs UDP,具体是采用那种socket类型,需要具体来看游戏游戏类型。以下是两种类型的优劣:
从上面的对比中,我们可以会发现,关于socket,我们想做的事情,tcp都帮我们做了,我们只需要建立链接,然后像读写文件一样读写就可以了。而udp需要我们自己设计一切。
看到这一切,你可能第一感觉就是采用tcp而非udp,那么真实情况是如此么?基于游戏的业务以及场景不同,我可以明确的告诉你,王者荣耀是采用udp的,包括腾讯多数长链接手游都是采用udp,这是为何?
  tcp保证数据可靠性是有代价的
tcp能够保证数据包的可靠性和有序,这一切都帮你封装好了。TCP发送一个数据包,等待一段时间,直到检测到数据包丢失了,如果没有接收到它的ACK,接下来就重新发送丢失的数据包到目标计算机。重复的数据包将被丢弃在接收端,乱序的数据包将被重新排序。以此来保证数据包的可靠性和有序性。
但为了保证可靠和有序,就要保证TCP无论什么情况,只要数据包出错,就必须等待数据包的重发。这是什么意思呐,就是说,即使最新的数据已经到达,但还是不能访问这些数据包,新到的数据会被放在一个队列中,需要等待丢失的包重新发过来之后,所有数据没有丢失才可以访问。
如此,如果遇到网络环境太差或者不稳定,比如说国内的移动网络,或者是遭遇到了网络阻塞,出现一个数据包丢失,所有事情都需要停下来等待这个数据包重发。客户端会出现等待接收数据,玩家操作会出现卡顿以及响应不及时的现象。
  udp的可靠性—DIY手动组装
从上面我们可以知道udp主要在可靠性上主要是不能保证数据包的顺序,比如第100个收到的数据包并不一定是第100个发出的数据包,同时也无法保证不丢包,期间有一个包丢失,udp本是也不会去校检。如果这两个问题解决了,udp的大部分可靠性问题也就解决了。
具体的方案我们这一篇就不在细说,大体上是如此来解决:
为每个数据包增加序列号,每发一次包,增加本地序号。
每个数据包增加一段位域,用来容纳多个确认符。确认字符多少个,跟进应用的发包速率来觉得,速率越高,确认字符的数量也相应越多。
每次收到包,把收到的包上序列号变为确认字符,发送包的时候带上这些确认字符。
如果从确认字符里面发现某个数据包有丢失,把它留给应用程序来编写一个包含丢失数据的新的数据包,必要的话,这个包还会用一个新的序列号发送。
针对多次收到同一包的时候可以放弃它
  同步方案
游戏中常见的同步方案,有状态同步和帧同步,一般大型的MMOARPG都是采用的是状态同步,比如魔兽世界,状态同步采用C/S架构,所有的状态由服务器来控制,安全性比较高,但是流量比较大。帧同步采用的是囚徒模式,所有c端强制采用一个逻辑帧率,从而保证输出一致,其特点是流量小,安全性比较差。
王者荣耀采用的就是帧同步,那么具体帧同步是什么,如何实现的,我们从两个地方来分解:
什么是帧率,可能没有做过client同学并不是很清楚这个术语,我们从一个小李子来讲解一下。我记得小时候有一种小人书,快速翻看就可以看到漫画上的人物会动起来。
由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10-12帧的时候,就会认为是连贯的, 此现象称之为视觉暂留。这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的,就像上图快速翻小人书一样。
游戏中的所有动画也是采用这种方式来渲染,只不过帧率是有GPU来控制,你所看到的画面都是有都是有GPU一帧帧渲染的,比如30帧/s,你所看到的画面就比较流畅了。而帧率越高你所看到的越流畅。
  Lockstep—帧同步
帧同步可以说是通过帧率延伸过来的,你可以把一个游戏看成一个巨大的状态机,所有的参与者都采用同一个逻辑帧率来不断的向前推进。
我们看如下2个图:
图中是A、B、C三个玩家的时间轴,这个时间轴不是电脑上的本地时间,而是A、B、C联机时定义的一个时间轴。虚线分隔出来时间片称为turn,可以理解成一帧。箭头表示该玩家将自己的操作指令广播给其他玩家。
我们把一盘游戏看成一个大型的状态机,因为大家玩的是同一款的游戏,因此F是相同的,初始状态S0也是相同的。在第一个turn结束时,所有玩家都接收到了完全一样的输入I,注意这里的I不是一个值,而是包含了当前游戏中所有玩家的操作指令集合。t1时刻所有玩家的电脑自行计算结果。由于F、S0和I是固定的,所以每个玩家电脑上计算出的下一个状态S1一定是相同的。
所以通过上面我们可以知道:
我们把游戏的前进分为一帧帧,这里的帧和游戏的渲染帧率并不是一个,只是借鉴了帧的概念,自定义的帧,我们称为turn。游戏的过程就是每一个turn不断向前推进,每一个玩家的turn推进速度一致。
每一帧只有当服务器集齐了所有玩家的操作指令,也就是输入确定了之后,才可以进行计算,进入下一个turn,否则就要等待最慢的玩家。之后再广播给所有的玩家。如此才能保证帧一致。
Lockstep的游戏是严格按照turn向前推进的,如果有人延迟比较高,其他玩家必须等待该玩家跟上之后再继续计算,不存在某个玩家领先或落后其他玩家若干个turn的情况。使用Lockstep同步机制的游戏中,每个玩家的延迟都等于延迟最高的那个人。
由于大家的turn一致,以及输入固定,所以每一步所有客户端的计算结果都一致的。
我们来看看具体的执行流程:
上图中我们可以明显看到,这种囚徒模式的帧同步,在第二帧的时候,因为玩家1有延迟,而导致第二帧的同步时间发生延迟,从而导致所有玩家都在等待,出现卡顿现象。
  乐观锁&断线重连
囚徒模式的帧同步,有一个致命的缺陷就是,若联网的玩家有一个网速慢了,势必会影响其他玩家的体验,因为服务器要等待所有输入达到之后再同步到所有的c端。
另外如果中途有人掉线了,游戏就会无法继续或者掉线玩家无法重连,因为在严格的帧同步的情况下,中途加入游戏是从技术上来讲是非常困难的。因为你重新进来之后,你的初始状态和大家不一致,而且你的状态信息都是丢失状态的,比如,你的等级,随机种子,角色的属性信息等。
比如玩过早期的冰封王座都知道,一旦掉线基本这局就废了,需要重开,至于为何没有卡顿的现象,因为那时都是解决方案都是采用局域网的方式,所以基本是没有延迟问题的。
后期为了解决这个问题,如今包括王者荣耀,服务器会保存玩家当场游戏的游戏指令以及状态信息,在玩家断线重连的时候,能够恢复到断线前的状态。
不过这个还是无法解决帧同步的问题,因为严格的帧同步,是要等到所有玩家都输入之后,再去通知广播client更新,如果A服务器一直没有输入同步过来,大家是要等着的,那么如何解决这个问题?
采用“定时不等待”的乐观方式在每次Interval时钟发生时固定将操作广播给所有用户,不依赖具体每个玩家是否有操作更新。如此帧率的时钟在由服务器控制,当客户端有操作的时候及时的发送服务器,然后服务端每秒钟20-50次向所有客户端发送更新消息。如下图:
上图中,我们看到服务器不会再等到搜集完所有用户输入再进行下一帧,而是按照固定频率来同步玩家的输入信息到每一个c端,如果有玩家网络延迟,服务器的帧步进是不会等待的,比如上图中,在第二帧的时候,玩家A的网速慢,那么他这个时候,会被网速快的玩家给秒了(其他游戏也差不多)。但是网速慢的玩家不会卡到快的玩家,只会感觉自己操作延迟而已。
  技能同步
游戏中有很多是和概率相关的,比如说技能的伤害有一定概率的暴击伤害或者折光被击等。按照帧同步的话,基于相同的输入,每个玩家的client都是独立计算伤害的,那么如何保证所有电脑的暴击伤害一致那。这个时候就需要用到伪随机了。
大部分编程语言内置库里的随机数都是利用线性同余发生器产生的,如果不指定随机种子(Random Seed),默认以当前系统时间戳作为随机种子。一旦指定了随机种子,那么产生的随机数序列就是确定的。就是说两台电脑采用相同的随机种子,第N次随机的结果是一致的。
所以在游戏开始前,服务器为每个玩家分配一个随机种子,然后同步给client,如此每个client在计算每个角色的技能时候,就能保证伤害是一致的。这也是多数帧同步游戏采用的方案,包括王者荣耀。
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点网络游戏 采用的是tcp协议还是udp协议? - 知乎37被浏览6536分享邀请回答94 条评论分享收藏感谢收起0添加评论分享收藏感谢收起专业的QQ下载站 本站非腾讯QQ官方网站
本类阅读排行
12345678910
热点图文新闻
腾讯游戏客户端加速中心有什么用 智能加速和强制加速是什么
导读:加速中心为玩家提供网络加速、自动清理内存、自动网速保护功能,全力保障您在游戏时的流畅性。网络加速功能,TGP目前提供智能加速和强制加速两种模式供您选择。
&加速功能是的特色之一,本篇将通过解答的方式带来该功能的详细介绍,一起来看看吧。腾讯游戏客户端(TGP)的“加速中心”有什么作用?“加速中心”为玩家提供“网络加速”、“自动清理内存”、“自动网速保护”功能,全力保障您在游戏时的流畅性。网络加速功能,TGP目前提供“智能加速”和“强制加速”两种模式供您选择。什么是“智能加速”?”智能加速“是指在启动游戏时,TGP智能判断您当前的网络与服务器的延迟,来决定是否需要进行网络加速。如果当前网络直接链接服务器的延迟较高的话,则为您选择最优的加速链路为您加速;如果延迟在正常范围之内,不需要加速,则不会为您加速。什么是“强制加速”?”强制加速“是指在启动游戏时,不检测您当前的网络情况,而是直接帮您选取最优的加速链路,帮您加速。“智能加速”和“强制加速”,我该选择哪个?建议您选择”智能加速“,让TGP来智能判断是否需要对您的网络进行加速。如何切换“智能加速”和“强制加速”?您可以在TGP中的加速中心面板中,点击”网络加速“右侧的下拉箭头来自行选择加速模式。如何自己选择加速节点?Step 1: 您需要将网络加速模式设置为“强制加速”。Step 2: 点击加速中心面板中的“选择加速节点“,在弹出的面板中来自行选择加速节点。如何关闭TGP的加速功能?您可以在“加速中心”的面板中,点击“网络加速”右侧的加速开关来开启/关闭网络加速功能。有了TGP后,是否就可以边游戏,边进行下载了?建议不要边游戏,边下载。虽然TGP可以为您加速,但是网络带宽的上行和下行数据总量是有限制的。因此建议在玩游戏时,尽量少使用占用网络带宽较多的软件。“自动内存整理”是做什么的?“自动内存整理”是指在您启动游戏时,会帮您优化一次内存,为游戏腾出更多的内存空间,使您游戏运行更加流畅。“自动网速保护“是用来做什么的?“自动网速保护”是指在您游戏时,TGP会在不影响您正常使用的情况下,自动对其他软件占用的网络带宽进行限速,保证游戏的流畅性。为什么开启“自动网速保护”后,感觉上网速度变慢了?开启“自动网速保护”后,TGP会在保障其他软件的正常使用的同时帮您自动限制其他软件的网络占用。因此在您游戏挂机时,请关闭该功能,以使得其他软件可以正常使用。从那里可以看到游戏的加速信息?您可以打开TGP的“加速中心”,在“游戏加速扫描”列表中查看到具体游戏的加速情况。
出处: 作者:qqtn小鱼
阅读本文后您有什么感想? 已有 0 人给出评价!登录人民网通行证 &&&
关于游戏加速与运维的一些解决方案分享
日16:34&&来源:
原标题:关于游戏加速与运维的一些解决方案分享
  不久前,国外网站High Scalability上的一篇论文将网络延迟这一话题提到了前台,引起了人们的关注。文中指出,对于电商巨头亚马逊,一旦网络有了100毫秒的延迟,就意味着它们可能会少卖掉1%的货物;谷歌搜索页面0.5秒的延迟,就可能导致网络流量20%的降幅;更有甚者,如果电子交易平台慢上五毫秒,那么一位证券经纪人可能每毫秒就少赚400万美元。而对于将体验视为生命线的游戏业务而言,无论多小的网络延迟,都将带来极大的损失。&
  特别是近两年游戏全球化正逐渐成为游戏行业拓展渠道的主流方式,全球环境下的网络延迟成为游戏厂商最为头疼的技术门槛。在9月16日,UCloud和InfoQ联合举办的“技术提升全球游戏体验”的主题沙龙中,来自UCloud、猎豹、网易的技术专家,分享了如何通过游戏上云、智能CDN、网络游戏布点与加速等技术手段,避免因国际链路抖动带来的网络访问延迟、丢包等问题,本文整理了部分精彩内容,为有游戏出海需求的开发者和公司提供了一些建议与思路。
  UCloud周浩城:游戏公司上云之路详解
  一款成功的全球游戏离不开后端技术和运维,但全球各地网络质量参差不齐,国与国之间的网络拥堵,导致国际网络访问间经常出现延迟、丢包等问题,给后端支持和运维人员带来了庞大的工作量,亦严重影响终端客户的使用体验。随着云计算在游戏领域的应用,这些棘手的问题都已经有了更好的应对之道。UCloud互动娱乐事业部架构总监周浩城通过游戏行业业务痛点分析,结合全球网络访问和区域覆盖架构构建经验,分享了一些移动游戏迁移云端的方法及策略。
  大多数全球游戏,网络访问链路基本上以美国为中心,向全球辐射的状态。因此,其他地区在进行跨国网络访问时,常常会因为国际链路不稳定(比如,丢包)直接回源,最终导致用户出现卡顿、延时过高等现象。以某游戏在美东登录为例, UCloud在用TCP 协议对443端口进行为期 24 小时检测发现,其网络延迟达到了364ms。而可用率才在82.5%左右,这里82.5%的可用性主要由于目标服务器地址在海外,高峰期 (21:00 - 23:00)中国境内访问海外还将有链路拥堵,严重影响网络质量。
  在这种情况下,想要提高网络访问性能,需要建立一条私有的网络专线保证连接顺畅。UCloud的PathX全球动态加速器在一些关键路径上借助UCloud的全球网络,建立了一条专属的私有网络通道。通过PathX加速,能够使原来的TCP延迟从364ms降低至224.14ms,而私有网络通道的构建,也保证了网络信息的可用率,有效防止丢包事件发生。
  关于地区性网络覆盖情况,周浩城表示,亚洲地区网络互联情况复杂,基建情况参差不齐、大陆与海岛穿插共存等都给网络覆盖带来了不小的挑战。游戏公司如何选择网络覆盖点?周浩城给出了三点建议:1)最好本地覆盖,特别台湾。台湾情况比较特殊即游戏发行必须使用台湾IP,因此东南亚的游戏,建议采用本地覆盖;2)香港最好覆盖越南,泰国,新加坡覆盖印尼,马来西亚;3)注意地区Local DNS问题。Local DNS出现问题的概率比较小,但还是存在,比如泰国、印尼等地出现连接失败的情况有可能是Local DNS解析失败导致的。
  猎豹佟卉斌:网络游戏全球化布点、加速
  猎豹全球手游MAU已超过1个亿,构建了「矩阵」+「爆款」的游戏产品布局,包括在美国大热的《钢琴块 2》和《滚动的天空》等。猎豹游戏作为游戏出海先行者拥有较丰富的游戏全球化制作和运营经验。现场猎豹移动技术总监佟卉斌针对各种网络游戏的通讯协议、技术选型以及游戏加速、监控特点进行阐述和解析,为有游戏出海需求的开发者提供一些游戏加速与布点建议和思路。
  一般游戏加速有三种实现方法,分别为:准确识别客户端地理位置、实现智能动态调度、使用专门的加速网络。
  ? 准确识别客户端地理位置:终端与服务器地理上的距离往往与网络通讯延迟成正比。精确识别客户端所处的地理位置可把玩家调度到与其网络通讯最好的服务器节点,实现网络加速。这里面涉及到1)IP地址判断2)GPS位置信息判断3)Ping值判断;
  ? 实现智能动态调度:包括配桌对战和单机对战。在配桌对战中,依据各个区玩家同时配桌数量与可调度区玩家的网络延迟进行动态调度,单机对战则通过识别客户端实际地理位置以及网络位置,将客户端调度到最近的服务器节点;
  ? 使用专门的加速网络:在全球各个数据中心、游戏中心架设专门加速网络,来提高通讯到达率、缩短通讯时间,实现游戏加速,实现智能动态调度。
  合理的全球布点离不开完善的监控网络,佟卉斌将网络监控分为客户端监控以及服务器端。
  监控。在客户端监控,运营商需要调度精准度即玩家是否被调度到网络最好的服务器节点,并且进行关键协议监控即玩家关键协议的到达率、处理时间,玩家在游戏中fps、卡顿、通讯延迟时间;而服务器端监控则需要查看服务器端负载均衡情况、服务器故障以及自动处理以及服务器服务质量监控(人数、延迟、处理时间)。
  UCloud张鹏波:PathX如何助力游戏全球服
  国内游戏市场已成为竞争惨烈的红海,"出海"已然成为众多游戏厂商为数不多的选择。但手游产品想实现全球化运营需要解决业务部署选址,网络优化,用户数据同步等多个棘手的问题。PathX是UCloud针对全球同服推出的网络加速产品,能够有效解决用户在全球范围内的访问质量。张鹏波现场揭秘了PathX是如何帮助游戏公司实现全球同服的。并结合UCloud海外布局规划,为手游全球化的运营提供一条"黄金航道。"&
  PathX在一些关键路径上借助于UCloud的全球网络,建立了一条专属的私有网络通道。那么,在国际网络链路不稳的情况下,它是如何提升网络访问速度的呢?下图为使用PathX之后的网络访问对比。1)使用PathX之前,由于中国到美国的国际链路不稳定(比如,丢包),直接回源会导致用户出现卡顿,延时过高等情况;2)PathX本地接入后,通过DNS智能解析,中国用户的流量从PathX中国节点接入,然后通过私有网络到达美国,并回到源站,基本可以保证零丢包。
  通过接入PathX,运营商能够进行网络流量分析,及时了解玩家来源以及分布情况,同时,因为在关键节点采用私网接入,用户网络的安全性相比于公有云,亦能得到极大的保障。目前,PathX已在游戏全球服、跨境电商、跨境游、远程医疗、苹果等多个对跨国网络质量要求较高的业务场景中得到应用。
  网易黄文宇:全球游戏优化经验谈
  如何做好全球范围内线路优化、加速节点部署以及的用户调度,是全球化浪潮下运维工作者必须面对的技术挑战。今年网易游戏上线了 UU 加速器手机版,为很多玩家提供了游戏加速服务,网易专家黄文宇从全球专线布点和全球用户调度两方面分享了这一部分实践经验。
  关于网络加速,黄文宇认为,加速其实就是在跟两件事情做斗争:带宽,延迟。加速器和体验优化的目的就是提升带宽、降低延迟。但运营商并不能真正的改变物理的极限,将网速无限提高,或者完全消灭延时。只是说相比于之前,将带宽提升到更高的,或者转发网络,使用户的流量能够走轻路由,最终让网络访问的那条道路不显得那么拥挤。
  基于这样的前提下,需要分析现在VPN面临的问题和用户期待的目标。传统的VPN会面临三大问题:1)协议复杂、移动环境适配差;2)VPN包头体积大、耗流量;3)二次开发难度高。那么,运营商需要做的就是打造一个定向流量加速、多开加速协议简单,同时能够适合移动端转发包头小,流量低。支持TCP/UDP与ICMP加速器。基于这样的目标,网易设计了UU加速器,以下为UU加速器的框架图。
  网易的UU加速器有三大优势:1)支持TCP/UDP,将来支持ICMP;2)转发包头小,不做加密,流量低;3)mainlink意外断掉,session_id十分钟内依然有效,保证重连够快。这样就比较完美的解决了现在网络拥堵的一些问题。关于远程网络访问用户调度,黄文宇表示,现阶段还没有单一的完美判断方式,根据需要综合判断,必要时也需与运营商合作寻找外部支援。
  下期精彩预告
  本次活动为UCloud和InfoQ联合举办的“UCan下午茶”系列技术沙龙第三期,后续UCloud还将在深圳、杭州等城市进行接下来的线下交流活动,为行业提供一个技术干货交流分享平台。
  10月21日UCloud与你相约深圳,定位“AI与大数据驱动下的云安全”,揭秘如何将深度学习与数据分析等技术与云安全相结合,抵御网络攻击。活动招募即将开启,感兴趣的读者可以关注“InfoQ”公众号或者查看活动行,了解最新活动预告以及报名。
  署名:InfoQ
(责编:杨虞波罗、沈光倩)

我要回帖

更多关于 游戏加速器哪个好 的文章

 

随机推荐