2013-03-14 158 views
0

我正在處理客戶端/服務器應用程序(使用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

有人有任何想法如何克服這一點?
預先感謝您!

回答

0

我最後一次遇到類似問題是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

相關問題