zhllxt / asio2

Header only c++ network library, based on asio,support tcp,udp,http,websocket,rpc,ssl,icmp,serial_port,socks5.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

在平板上发送消息延迟严重

gitthb opened this issue · comments

凌动处理器的平板。循环调用async_send发送消息,延迟很大,开始是两三秒,很快就是延迟3、4分钟。同样的代码在笔记本电脑上就没有这么大延迟,保持在3、4秒钟左右。请问是什么原因?是平板性能跟不上?

  1. 延迟你是怎么测出来的?我严重怀疑你的测试方式错了。
  2. 别说延迟3 4分钟了,延迟3 4秒理论上就是不可能的。
  3. 如果你确认你的测试方法没错,那估计是网络有严重问题,你是不是WIFI下测试的?会不会WIFI网络有问题。此时你可以下载一个网络调试助手(网上搜搜,应该有很多),测一下延迟,确认是不是网络问题。

延迟是通过发消息这边给消息加时戳,服务器这边收到消息后也打印服务器端时戳来看的。
图片
在平板上是每秒都会发送4个消息出去,日志也都记录了间隔时间,基本上两个消息执行发送就200毫米左右。但是服务端时间延时就越来越长,但不会丢失消息。
服务端也是用的asio2来收发消息。

电脑和平板用的是同一个网络,服务端在云上。各个机器上都做了自动时钟同步的。

平板上软件启动后服务器收到的一个消息延迟很少,后来就延迟越来越大。

最好的测延迟的方法是测来回,发数据出去,等收到数据时,用收数据时间减去发数据时间,时间差是在同一台机器上计算的,这更准确。

但是既然各机器都做过了时钟同步,而且延迟有3 4分钟的情况,那应该不是时钟同步有问题导致的。

你用asio2自带的example测试一下看看吧,测试完如果发现延迟正常(延迟正常的表现应该是和ping你服务器的机器的超时基本相同才对),那说明你业务代码有问题(后来就延迟越来越大,每秒4个消息这就非常少的消息量,说是网络阻塞的可能性不大)

如果用asio2自带的example测还有问题,那就再找个网络助手来测,肯定能找到原因。我不知道你的原因在哪里。

通过在发送消息前Sleep来讲延时控制到2秒内,这种只是临时的解决办法。真正的还是要看看是不是平板性能导致需要重写代码。。

你用asio2的example测了没

平板性能导致的延迟,我认为是这个原因的可能性太小了,可以忽略不计,因为我们的项目在常用安卓机(局域网工作),没有任何问题,根本没发现有延迟到不可接受的现象,而且我们的产品的实时性要求很高。

发送端我用example里的例子试了,也有2秒左右的延时。我再看看是不是服务端导致的。另外,我用的是websocket的通信方式,这种方式延时2秒正常么?

不正常
但偶尔有1包延迟2秒是有可能的,用ping命令对比一下,延迟大的时候,必然ping延迟也大
应该server和client都用example,来测试一下

我clinet完全用example里面的来跑,ubuntu20 虚拟机里面直接编译exmaple,跑出来来回是30毫秒左右的时间间隔;但是同样的代码放在windows下去跑(qt环境),跑出来就是要有2秒左右的间隔。(代码是一样的,pro也没有什么特别的)。为什么会这样呢?qt里面pro用了《QT = core

CONFIG += c++17 cmdline》。是因为qt会对这个异步发送有影响么?改用vs2017编译后运行,也是同样的有两秒延时。