下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

游戏帧同步介绍之服务器架构

作者:匿名     来源: 互联网点击数:1487发布时间: 2021-10-18 10:50:39

标签: unity3d帧同步服务器架构

  王者,大家都很熟悉。在接下来的文章中,大家跟随小编一起来看看王者荣耀的技术实现和同步方法。

  服务器架构

  不难发现,王者荣耀的服务器采用房间模式,每个玩家登录后进入大厅匹配游戏。匹配完成后,将一起战斗的玩家放入一个房间进行战斗。  

  房间游戏和MMORPG有很大的区别,因为它的在线广播单元不确定性和广播数量很小,需要匹配一个房间服务器,让少数人进入一个服务器。

  这类游戏最重要的是其游戏厅的承载能力。每个游戏室都受逻辑限制,需要维护和播放的玩家数据有限。但是游戏厅需要维持相当高的在线用户数量,所以一般来说,这类游戏还是需要做分服的。而且游戏厅中最具挑战性的任务,就是自动匹配玩家进入一个游戏室,这需要对所有在线玩家进行搜索和过滤,以及为了更好的体验,将玩家分区域进行匹配,以方便获得更快的同步。

  一般来说,玩家首先登录大厅服务器,然后选择团队游戏的功能。服务器会通知所有参与的游戏客户端,开一个新的连接到房间服务器上,这样所有参与的用户都可以在房间服务器交互。

  通信方式

  谈到通信方式,通常有http和socket两种方式,但是http的底层也是采用socket,只是每次通信完成后都会断开,这种方式对于需要频繁交互的双方来说,显得效率太低,所以一般实时要求高的游戏都是采用socket方式进行通信。

  但是sokect通信可以分为两种:TCPvsUDP,具体采用socket类型,需要具体看游戏类型。这里有两种优缺点:  

  通过以上对比,我们可以发现,关于socket,我们想做的事,tcp都帮助了我们,我们只需建立一个链接,然后像读写文件一样读写即可。udp需要我们自己设计一切。看到这一切,你的第一感觉可能是使用tcp而不是udp,那么真实情况是这样的吗?基于游戏的业务和场景不同,我可以清楚的告诉你,王者荣耀采用udp,包括腾讯大部分长链接手游。为什么?

  ·tcp保证数据可靠性是有代价的。

  tcp可以保证数据包的可靠性和有序性,帮助您包装。TCP发送一个数据包,等待一段时间,直到检测到数据包丢失。如果没有接收到它的ACK,将再次将丢失的数据包发送到目标计算机。重复的数据包将被丢弃在接收端,乱序的数据包将被重新排序。为了保证数据包的可靠性和有序性。

  但是,为了保证可靠性和秩序性,必须保证TCP在任何情况下,只要数据包出错,就必须等待数据包的重新发送。这是什么意思?也就是说,即使最新的数据已经到达,这些数据包仍然无法访问,新的数据将被放在一个队列中。需要等待丢失的包重新发送后,所有数据都不会丢失才能访问。

  这样,如果网络环境太差或者不稳定,比如国内动网络,或者网络堵塞,数据包丢失,一切都需要停下来等待数据包重新发送。客户端会等待接收数据,玩家操作会卡死,反应不及时。

  ·udp的可靠性-DIY手动组装。

  从以上可以知道,udp的可靠性主要不能保证数据包的顺序。比如第100个收到的数据包不一定是第100个发出的数据包,也不能保证不丢包。在此期间,一个包丢失了,udp不会去校检。如果这两个问题解决了,udp的大部分可靠性问题就解决了。

  具体方案我们这篇文章就不细说了,一般都是这样解决的:

  1.为每为每个数据包添加序列号,每次发送增加本地序列号。

  2.每个数据包增加一个位域,以容纳多个确认符。确认多少个字符,跟进应用程序的包装速度,感觉速度越高,确认的字符越多。

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

  4.如果从确认字符中发现确认字符中丢失,留给应用程序编写一个包含丢失数据的新数据包,如有必要,该包将通过新的序列号发送。

  5.多次收到同一包可以放弃。

  由于篇幅问题,小编先介绍这么多。

    >>>>>>点击进入游戏开发专题

赞(8)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程