实时Web-如何计算出C/S单向的延迟?

实时Web-如何计算出C/S单向的延迟?

晚风撩人 发布于 2017-05-15 字数 449 浏览 1010 回复 2

比如我有一个需要精确同步的操作(比如开始战斗后,服务器和客户端同时做一件事情),如何排除掉网络延迟的影响呢。
想过带时间戳的方案,A玩家登录完成后和服务器对时,在地图中以这个时间为准,A玩家带个经过时间广播给B,B收到这个消息后就可以根据该时间,和收到消息的时间,这2个的差就知道A其实已经延迟了多少,模拟一些效果。
但是问题是在和服务器对时的时候,如果延迟高也没办法。
有没有什么办法能知道单向的延迟?比如C->S,S->C?请教大伙。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灵芸 2017-06-16 2 楼

这个问题我也有兴趣,探讨一下,如果要精确的计算出延迟时间的话,我认为单靠本系统内的时间戳是无法解决的,必须依靠第三方提供标准时间作为参照物,便如服务器和客户端要有一个同步时间的机制,对齐两边的时间,然后C/S两边的时间戳才能找到参照物。

虐人心 2017-05-27 1 楼

计算两台服务器的延时,windows下使用ping命令,Linux下使用traceroute,然后看打印出来的ms数。
这两个程序其实都是利用ICMP报文。
ping程序是发送一份ICMP回显请求报文给主机,然后等待返回的ICMP回显应答。发送之前在IP数据报中设置IP PR和IP时间戳选项,这样每个处理该数据包的路由器都把它的IP地址和当前时间戳放入该字段。
Traceroute程序是发送一份UDP数据报给目的主机,UDP端口为大于30000,使目的主机的任何一个应用程序都不可能使用该端口。这时目的主机将往回发送"端口不可达"ICMP报文。随后ICMP报文中也会填入经过的路由器和时间戳信息。

不只是ping和traceroute两个程序,就连路由器进行IP选路(数据往该往哪走、往哪最近)都使用ICMP报文。
所以“计算出C/S单向的延迟”根本的解决方法是,自己实现一个发送UDP端口为大于30000或者ICMP回显请求报文给另一台主机,然后接收ICMP报文回应,因为这样非常高效,几乎无延时。当然直接使用ping、traceroute也是可以的。