1、UDP: 这是一种网络传输协议,相比于我们熟知的TCP协议,UDP的特点是非常快,但不可靠。
快 因为它不需要先建立连接(三次握手),也不关心数据包是否按顺序到达、是否丢失,它就像“撒手没”,发出去了就不管了。
不可靠 正是因为它不管,所以数据包可能会丢失、乱序。
为什么游戏爱用UDP 对于实时性要求极高的游戏(如射击游戏、MOBA、赛车游戏),速度比完美更重要,丢失一两个数据包(比如玩家的位置信息)没关系,游戏逻辑可以根据最新的数据立刻推算出来,但如果为了确保每个数据包都完美送达而等待、重传(TCP的做法),就会造成延迟和卡顿,这是无法接受的。
2、中继服务器: 你可以把它想象成一个中转站或邮局。
* 在没有中继服务器的情况下,理想状态是玩家A和玩家B的游戏客户端直接通信(P2P模式)。
* 但现实很骨感,由于NAT(网络地址转换)和防火墙的存在,很多玩家都在路由器后面,没有公网IP,导致两个客户端常常无法直接建立连接。
3、游戏UDP中继服务器: 结合以上两点,它的意思就明确了。
游戏UDP中继服务器就是一个位于公网上的、拥有固定IP地址的服务器,所有游戏的客户端都先连接到这个服务器,然后由这个服务器负责在所有连接的客户端之间转发UDP数据包。
我们以一个简单的双人对战游戏为例:
1、连接中继: 玩家A和玩家B启动游戏,他们的客户端都会主动去连接游戏公司提供的UDP中继服务器(Relay Server),由于是客户端主动“出站”连接,NAT和防火墙通常都会允许。
2、注册与登记: 玩家A和B连接到中继服务器后,会告诉服务器:“你好,我是玩家A,我想进行游戏匹配”,服务器会记录下每个客户端的连接信息(IP和端口)。
3、数据中继:
* 当玩家A移动了一下,他的客户端会生成一个UDP数据包,里面包含“我的新位置是X”。
* 这个数据包不是直接发给玩家B,而是发给中继服务器。
* 中继服务器收到后,立刻查看当前有哪些玩家在同一局游戏中,然后把这个数据包复制一份,转发给玩家B(以及局内的所有其他玩家)。
4、全程中转: 整个游戏过程中,所有玩家之间的所有通信(移动、开枪、放技能等)都通过这个中继服务器进行转发,玩家A <-> 中继服务器 <-> 玩家B。
文章摘自:https://idc.huochengrm.cn/js/14504.html
评论