Unity高性能网络通信研究(一) 延迟

本文分享了一套专为极低延迟游戏设计的网络通信框架研发经验,详细解析了从数据发送到接收过程中的延迟构成,包括网络延迟、服务器处理延迟及Unity处理延迟,并计算了乐观与悲观延迟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

■ 写在前面:

最近做的项目,都是需要极低延迟的游戏。所以,哪怕是10毫秒的延迟,我都耗费了十几天的时间,努力降低下来。最终研发出一套极低延迟的网络通信框架。下面把一些研究结果,和心得写下来,与大家分享。原创不易,研究更不易,转载请注明出处。

 

■ 发数据

首先, 调用发送数据代码, 例如在update里进行数据发送,并不延迟。

多次测试,从打印日志可以看到,从发送,到确认已经发送完数据,最多消耗2毫秒(一般是1毫秒内),几乎没有延迟。

■ 收数据

下面,有意思的来了:

网络延迟:网络延迟就是,数据往返行程时间RTT(Round-Trip Time)。也就是ping时间。

服务器处理延迟:绝大多数情况下,服务器是要处理数据的,而不是简单回传。我写的高性能架构,大概能控制在4ms以内。

Unity处理延迟:

1,无论是多线程(或者协程)作为接收网络数据的模块,最后还得返回Unity主线程里去处理。也就是落实到FixedUpdate() 或者Update()函数里。这个部分起码消耗1毫秒。

2,要等FixedUpdate() 或者Update()的下一次调用。如果游戏目标帧率是30帧的话,那么最长处理等待就是33毫秒,最短1ms。

3,实际的逻辑处理,一般会跨游戏体调用,也就是回调,或者委托,又需要起码1毫秒。

 

下面计算乐观延迟和悲观延迟

乐观延迟 = 网络延迟(20ms)+ 服务器处理延迟(4ms)+ Unity最短处理延迟(3ms) = 27 ms

悲观延迟 = 网络延迟(200ms)+ 服务器处理延迟(4ms)+ Unity最长处理延迟(35ms) = 239 ms

 

 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值