长连接手游 ping 值是怎么实现的?

2017-08-08 15:46:35 +08:00
 imherer

比如王者荣耀右上角有一个实时显示当前延迟的数字,这个是怎么实现的? 客户端不停的像服务器发送请求,服务器收到后返回给客户端,然后客户端拿到服务器的返回后,计算这个时间差吗?

socket.io 有封装好的 api 吗?

4946 次点击
所在节点    程序员
27 条回复
Famio
2017-08-08 15:52:14 +08:00
从“欢迎来到王者荣耀”开始,计时器就开始计时了,而后周期性的计算封包来往时间做计算。
zjsxwc
2017-08-08 16:00:16 +08:00
应该可以通过计算心跳包间隔时间,得出 ping 值,不用刻意再搞个 ping 计算接口吧。
8355
2017-08-08 17:30:16 +08:00
数据包一直在传递啊 持续计算就行了啊.
41547Caesar
2017-08-08 17:36:27 +08:00
@Famio 打开游戏就开始了吧,登录以后右上角就有一个延迟的展示。
flynaj
2017-08-08 21:27:09 +08:00
win10 任务管理器里面也有
akira
2017-08-08 22:50:12 +08:00
服务器返回的 封包里面 带上发送时候的时间,本地收到以后,获取本地时间和他做下计算,就可以了啊
realpg
2017-08-09 01:21:11 +08:00
@akira #6
结果由于服务器跟本地时钟不一致,每个包延迟 2 分钟
liuminghao233
2017-08-09 01:46:21 +08:00
@akira
要是服务器在美国 客户在中国
那延时岂不是四万多秒?
这个游戏节奏有点慢啊
lslqtz
2017-08-09 01:58:43 +08:00
@liuminghao233 统一 UTC 或 UNIX 时间戳不行?
raysonx
2017-08-09 02:09:23 +08:00
客户端发送本地时间到远程服务器,远程服务器反射时间,客户端收到后拿收到时间做减法
msg7086
2017-08-09 04:45:14 +08:00
@liuminghao233 时间包括时区啊。
xenme
2017-08-09 06:33:04 +08:00
@liuminghao233 这么复杂?记录发出去的时间,然后看回包啥时候到的,计算下时间差就好了么,哪里还要时区
acros
2017-08-09 06:40:03 +08:00
这个游戏是帧同步的,每帧打包信息带时间戳....
ytmsdy
2017-08-09 08:57:28 +08:00
游戏都有心跳包的,根据心跳包的返回的时间就能计算出延时时间。
ytmsdy
2017-08-09 08:58:06 +08:00
@realpg 一般上都是时间戳的。不会存在时差的问题
enenaaa
2017-08-09 09:19:29 +08:00
@realpg 一般开始游戏时会对时。 另外心跳计算延迟跟两边时钟差距没关系啊,本地计算发送时间、接受时间即可。
jhaohai
2017-08-09 09:23:15 +08:00
通信数据都带时间戳的吧
sujin190
2017-08-09 09:44:22 +08:00
@realpg #7
@liuminghao233 #8 先肯定是要校时的啊,还用说,否则多人怎么确认都是在同一个画面上啊
zpf124
2017-08-09 10:22:19 +08:00
恕我愚钝, 游戏不都是 udp 么...
用 tcp 长连接的,应该早就顺序发送,数据校验以及丢包重传 延迟超过 3s 了。
zpf124
2017-08-09 10:23:23 +08:00
@zpf124 漏了几个字, “应该早就(因为)”

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381396

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX