Qt TCP服务器/多客户端消息读取

Qt TCP server/multi-client message reading

本文关键字:客户端 消息 读取 TCP 服务器 Qt      更新时间:2023-10-16

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

我尝试将传入的连接放在单独的线程中(每个连接一个线程),但没有任何改进。
我也试图上升一个线程,每次我得到一个readyRead()信号,但再次没有…

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

在客户端,编写数据的代码非常简单:
tcpSocket->write(message.toUtf8());  
tcpSocket->waitForBytesWritten();  
tcpSocket->flush();

我也试过没有flush()waitForBytesWritten(),但相同的…

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

有人知道如何克服这个吗?
提前感谢!

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

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

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