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

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

问题描述:

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

我试图把传入连接放在单独的线程(每个连接的线程),但没有任何改进。
我也试过,每次我有一个readyRead()信号上升一个线程,但同样没有......

,但是当我在同一台PC服务器上运行多个客户端,一切似乎确定。当在网络上使用不同的PC时,发生滞后... (网络使用的是100Mbps LAN,消息是< 200KB,而PC之间的ping是< 5毫秒,所以我不认为这是网络问题)

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

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源中的定时器周期,但最终我们基于本机OS机制切换到共享内存。

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

+0

我在Windows 7/XP上使用qt 4.8.4。你能提供一些关于你使用的解决方案的更多信息吗?谢谢! – GSta 2013-03-14 14:23:50