0

我正在开发一个客户端/服务器应用程序(将 qt 用于 tcp)。客户端每秒必须向服务器发送大约 15 条消息。问题是这样的:
来自客户端的消息是分组接收的。我的意思是:当我收到readyRead()信号并从套接字读取数据时,缓冲区中有多个消息。
这当然会导致系统滞后。

我尝试将传入连接放在单独的线程中(每个连接线程),但没有任何改进。
每次收到readyRead()信号时,我也尝试启动线程,但又没有...

但是当我在与服务器相同的电脑上运行多个客户端时,一切似乎都很好。当在网络上使用不同的电脑时,会出现延迟......(使用的网络是 100Mbps LAN,消息 <200KB,电脑之间的 ping <5msec,所以我不认为这是网络问题)

在客户端,写入数据的代码非常简单:

tcpSocket->write(message.toUtf8());  
tcpSocket->waitForBytesWritten();  
tcpSocket->flush();

我也尝试过没有flush()waitForBytesWritten()相同的...

编辑:使用 Qt 4.8.4 和 Windows 7 和 XP

有人知道如何克服这个问题吗?
先感谢您!

4

1 回答 1

0

上次我遇到类似问题是 Qt3.3 的 QProcess 的 stdin/stdout 通信。它在 Linux 和 Windows 上的行为完全不同。

最后我们发现,在 Linux 上,它使用 select() 在数据到达时进行异步反应(快速,在大多数情况下只有一行可读),而在 Windows 上,新数据的存在是通过 Qt 主循环中的 QTimer 轮询的(大延迟,有几条消息可用)。我们尝试的一种解决方法是减少 Qt 源中的计时器周期,但最后我们切换到基于本机操作系统机制的共享内存。

您的描述听起来像是您在 Windows 操作系统上使用类似的 Qt 版本。

于 2013-03-14T14:07:19.203 回答