QTcpSocket 仅每 ~0.5 秒读取一次数据,即使数据包非常小,有啥方法可以加快速度吗?

Posted

技术标签:

【中文标题】QTcpSocket 仅每 ~0.5 秒读取一次数据,即使数据包非常小,有啥方法可以加快速度吗?【英文标题】:QTcpSocket only reading data every ~0.5s, even with really small packets, any way to speed it up?QTcpSocket 仅每 ~0.5 秒读取一次数据,即使数据包非常小,有什么方法可以加快速度吗? 【发布时间】:2014-08-11 23:59:48 【问题描述】:

我有一个带有 QTcpSocket 和 QTcpServer 的客户端/服务器设置,它是一个实时的东西,所以理想情况下它需要尽可能快,但是数据包仅每 ~0.5 秒发送和接收一次,即使它们非常小(很少超过几个字节)。同样重要的是没有数据包丢失,所以我不能使用 UDP。我看到另一个线程,有人说在服务器端为每个客户端设置 QAbstractSocket::LowDelayOption 为 1,但我试过了,没有任何区别。有什么办法让它更快?

【问题讨论】:

如果您将时间敏感数据从客户端发送到服务器,您可能还需要在客户端设置 LowDelayOption。 刚刚试过了,好像还是没效果…… 【参考方案1】:

TCP 套接字尝试在每个数据报中容纳尽可能多的数据,因此 0.5 秒可能是操作系统决定它已经等待足够的时间并且暂时不会发送更多数据并决定刷新的时间套接字将缓冲区发送到网络。

您可以尝试使用flush() 将缓冲的数据强制推送到网络。

【讨论】:

flush() 不会将内容强制到网络上,而只会强制到 网络堆栈。数据被呈现给操作系统,就是这样。使用 LowDelayOption 是 TCP 套接字的唯一解决方法,这根本不是 Qt 特定的

以上是关于QTcpSocket 仅每 ~0.5 秒读取一次数据,即使数据包非常小,有啥方法可以加快速度吗?的主要内容,如果未能解决你的问题,请参考以下文章

STM32能否实现0.5us的精确延时?

QTcpSocket,无法读取传入数据

如何使用 QTcpSocket 读取超过 8192 字节?

读取 QTcpSocket

QTcpSocket同步读取

每 n 秒复制一次