首先说明,测试不一定严谨,只是为了记录测试过程
为了能有对比性,这里采用了asio1.18.1作为服务端,分别使用qtcpsocket和asio进行测试
测试在本机测试 127.0.0.1
一.测试tcp
- 创建asio tcp服务器端,接到数据后立刻返回到发送端
- 创建asio tcp客户端,发送数据,打印接收数据和发送数据间的时间差(微秒级)
- 创建qtcpsocket 客户端,使用信号槽方式接收数据,发送数据,打印接收数据与发送数据间的时间差(微秒级)
- 结果如下
asio tcp client:
qtcpsocket client:
- 结论:qtcpsocket 接收时间比asio长, asio平均在200us左右,qt平均1.5ms…
二.测试udp
- 创建asio udp服务器端,接到数据后立刻返回到发送端
- 创建asio udp客户端,发送数据,打印接收数据和发送数据间的时间差(微秒级)
- 创建qudpsocket 客户端,使用信号槽方式接收数据,发送数据,打印接收数据与发送数据间的时间差(微秒级)
- 创建qudpsocket 客户端,使用loop 方式接收数据,发送数据,打印接收数据与发送数据间的时间差(微秒级)
- 测试结果:
asio udp client:
qudpsocket 信号槽 client:
qudpsocket loop client:
- 结论: 使用asio udp 时间大概150us左右,qudp信号槽1500us左右,qudp loop 100us左右,
总结
qt在使用信号槽上会占用大量时间,大概会占用到1400us左右…所以,如果要开发低延时应用,建议使用asio或者qudpsocket/qtcpsocket loop的方式…不要使用信号槽.
我主要是为了测试实时性,并没有测试大数据性能问题,但对于客户端来说,应该没有太大问题
网上都说Qt的网络性能很差,应该是说的Qt服务端,这个我测试过使用qtcp 客户端和qtcp服务端,延时大概在2-3ms
这里就不贴代码了,放github上了测试代码:https://github.com/tianxiaofan/QtNetworkTest
另外如果看丢包率可参考:https://blog.csdn.net/goldenhawking/article/details/105622237