我正在研究客户端/服务器应用程序(使用qt for 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
任何人都知道如何克服这个问题? 提前谢谢!
答案 0 :(得分:0)
我最后一次遇到类似的问题是Qt3.3的QProcess的stdin / stdout通信。它在Linux和Windows上的表现完全不同。
最后我们发现在Linux上它使用select()在数据到达时异步反应(快速,大多数情况下只有一行可读),而在Windows上,新数据的存在是通过Qt主从Qt主循环查询的(大延迟,有几条消息可用)。我们尝试的一种解决方法是减少Qt源中的计时器周期,但最后我们根据本机操作系统机制切换到共享内存。
您的说明听起来像是在Windows操作系统上使用类似的Qt版本。