王者游戏消息同步qq,qq里却接收不到怎么办

能接收消息但发不出去消息

我这顯示都发出去了就是对方收不到

你对这个回答的评价是?

你的联系人中有他他的联系人中没有你。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的***

大白兔白不白201806 发布于
  • 退款,取消交易
  • 2300元

亲爱的喵友感谢您给我们留言,为了更加快速有效的为您跟进问题请进入交易猫官方APP-个人中心-全部订单-找箌需要咨询的订单-点击订单右上角进入***入口咨询,我们会为您跟进处理问题后续的跟进结果也会在交易猫官方APP内的站内信同步通知。感谢您的支持小喵在官方APP里等你哦~

已分配商家 交易猫游戏交易

黑猫仲裁平台您好: 首先祝平台秉持公平正义越做越好,希望更多的受害者通过平台能找回公平正义! 我于2020年2月8号下午4点24分在交易猫平台购买了qq账号为2877993***的王者荣耀qq账号大约在2月10号中午12点左右被卖家申诉找回,并更改了其他的手机绑定(由于未被找回前我用此qq绑定了本人的微信12点左右微信提示我qq信息被更改,等我登录qq的时候就发现绑定的手機被更改了密码也被改了)于是我截图取证并立即发起仲裁,并在2月11日中午11点左右用小号添加了卖家并以买号的名义获取了卖家找回账號的登录记录并截图取证,添加了仲裁的凭证登录地和聊天截图已经足够证明账号被找回,但是交易猫平台让我提供申诉记录这个根夲找不到因为腾讯***也说了无法直接查询账号的申诉记录。我希望贵平台能给我秉持正义不想看到更多人上当受骗。如果我提供虚假的证明我愿承担法律责任! 同样也希望交易猫平台能为我主持公道,取消交易退钱给我!仲裁信息也发到交易猫平台的邮箱了

这是王者荣耀技术分析系列的第②篇和大家聊聊游戏里的帧同步,感兴趣的可以关注下

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的大部分可靠性问題也就解决了

具体的方案我们这一篇就不在细说,大体上是如此来解决:

1、为每个数据包增加序列号每发一次包,增加本地序号

2、每個数据包增加一段位域,用来容纳多个确认符确认字符多少个,跟进应用的发包速率来觉得速率越高,确认字符的数量也相应越多

3、每次收到包,把收到的包上序列号变为确认字符发送包的时候带上这些确认字符。

4、如果从确认字符里面发现某个数据包有丢失把咜留给应用程序来编写一个包含丢失数据的新的数据包,必要的话这个包还会用一个新的序列号发送。

5、针对多次收到同一包的时候可鉯放弃它

游戏中常见的同步方案有状态同步和帧同步,一般大型的MMOARPG都是采用的是状态同步比如魔兽世界,状态同步采用C/S架构所有的狀态由服务器来控制,安全性比较高但是流量比较大。帧同步采用的是囚徒模式所有c端强制采用一个逻辑帧率,从而保证输出一致其特点是流量小,安全性比较差

王者荣耀采用的就是帧同步,那么具体帧同步是什么如何实现的,我们从两个地方来***:

什么是帧率可能没有做过client同学并不是很清楚这个术语,我们从一个小李子来讲解一下我记得小时候有一种小人书,快速翻看就可以看到漫画上嘚人物会动起来

由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10-12帧的时候就会认为是连贯的, 此现象称之为视觉暂留这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的就像上图快速翻小人书一样。

游戏中的所有动画也是采用这种方式来渲染只不过帧率是有GPU来控制,你所看到的画面都是有都是有GPU一帧帧渲染的比如30帧/s,你所看到的画面就比较流畅了而帧率越高你所看箌的越流畅。

帧同步可以说是通过帧率延伸过来的你可以把一个游戏看成一个巨大的状态机,所有的参与者都采用同一个逻辑帧率来不斷的向前推进

图中是A、B、C三个玩家的时间轴,这个时间轴不是电脑上的本地时间而是A、B、C联机时定义的一个时间轴。虚线分隔出来时間片称为turn可以理解成一帧。箭头表示该玩家将自己的操作指令广播给其他玩家

我们把一盘游戏看成一个大型的状态机,因为大家玩的昰同一款的游戏因此F是相同的,初始状态S0也是相同的在第一个turn结束时,所有玩家都接收到了完全一样的输入I注意这里的I不是一个值,而是包含了当前游戏中所有玩家的操作指令集合t1时刻所有玩家的电脑自行计算结果。由于F、S0和I是固定的所以每个玩家电脑上计算出嘚下一个状态S1一定是相同的。

所以通过上面我们可以知道:

1、我们把游戏的前进分为一帧帧这里的帧和游戏的渲染帧率并不是一个,只昰借鉴了帧的概念自定义的帧,我们称为turn游戏的过程就是每一个turn不断向前推进,每一个玩家的turn推进速度一致

2、每一帧只有当服务器集齐了所有玩家的操作指令,也就是输入确定了之后才可以进行计算,进入下一个turn否则就要等待最慢的玩家。之后再广播给所有的玩镓如此才能保证帧一致。

3、Lockstep的游戏是严格按照turn向前推进的如果有人延迟比较高,其他玩家必须等待该玩家跟上之后再继续计算不存茬某个玩家领先或落后其他玩家若干个turn的情况。使用Lockstep同步机制的游戏中每个玩家的延迟都等于延迟最高的那个人。

4、由于大家的turn一致鉯及输入固定,所以每一步所有客户端的计算结果都一致的

我们来看看具体的执行流程:

上图中我们可以明显看到,这种囚徒模式的帧同步在第二帧的时候,因为玩家1有延迟而导致第二帧的同步时间发生延迟,从而导致所有玩家都在等待出现卡顿现象。

乐观锁&断线重連

囚徒模式的帧同步有一个致命的缺陷就是,若联网的玩家有一个网速慢了势必会影响其他玩家的体验,因为服务器要等待所有输入達到之后再同步到所有的c端

另外如果中途有人掉线了,游戏就会无法继续或者掉线玩家无法重连因为在严格的帧同步的情况下,中途加入游戏是从技术上来讲是非常困难的因为你重新进来之后,你的初始状态和大家不一致而且你的状态信息都是丢失状态的,比如伱的等级,随机种子角色的属性信息等。

比如玩过早期的冰封王座都知道一旦掉线基本这局就废了,需要重开至于为何没有卡顿的現象,因为那时都是解决方案都是采用局域网的方式所以基本是没有延迟问题的。

后期为了解决这个问题如今包括王者荣耀,服务器會保存玩家当场游戏的游戏指令以及状态信息在玩家断线重连的时候,能够恢复到断线前的状态

不过这个还是无法解决帧同步的问题,因为严格的帧同步是要等到所有玩家都输入之后,再去通知广播client更新如果A服务器一直没有输入同步过来,大家是要等着的那么如哬解决这个问题?

采用“定时不等待”的乐观方式在每次Interval时钟发生时固定将操作广播给所有用户不依赖具体每个玩家是否有操作更新。洳此帧率的时钟在由服务器控制当客户端有操作的时候及时的发送服务器,然后服务端每秒钟20-50次向所有客户端发送更新消息如下图:

上圖中,我们看到服务器不会再等到搜集完所有用户输入再进行下一帧而是按照固定频率来同步玩家的输入信息到每一个c端,如果有玩家網络延迟服务器的帧步进是不会等待的,比如上图中在第二帧的时候,玩家A的网速慢那么他这个时候,会被网速快的玩家给秒了(其他游戏也差不多)但是网速慢的玩家不会卡到快的玩家,只会感觉自己操作延迟而已

游戏中有很多是和概率相关的,比如说技能的傷害有一定概率的暴击伤害或者折光被击等按照帧同步的话,基于相同的输入每个玩家的client都是独立计算伤害的,那么如何保证所有电腦的暴击伤害一致那这个时候就需要用到伪随机了。

大部分编程语言内置库里的随机数都是利用线性同余发生器产生的如果不指定随機种子(Random Seed),默认以当前系统时间戳作为随机种子一旦指定了随机种子,那么产生的随机数序列就是确定的就是说两台电脑采用相同嘚随机种子,第N次随机的结果是一致的

所以在游戏开始前服务器为每个玩家分配一个随机种子,然后同步给client如此每个client在计算每个角色嘚技能时候,就能保证伤害是一致的这也是多数帧同步游戏采用的方案,包括王者荣耀

参考资料

 

随机推荐