0

私はクライアント/サーバーアプリケーションに取り組んでいます(tcpにqtを使用しています)。クライアントは、毎秒約 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 の使用

これを克服する方法を知っている人はいますか?
前もって感謝します!

4

1 に答える 1

0

私が最後に同様の問題に遭遇したのは、Qt3.3 の QProcess の stdin/stdout 通信でした。Linux と Windows では動作がまったく異なります。

最後に、Linux では select() を使用してデータが到着したときに非同期に反応する (高速で、ほとんどの場合 1 行しか読み取れない) のに対し、Windows では新しいデータの存在が Qt メインループから QTimer を介してポーリングされる (大きな遅延、いくつかのメッセージが利用可能です)。私たちが試みた回避策は、Qt のソースでタイマー期間を短縮することでしたが、最終的にネイティブ OS メカニズムに基づく共有メモリに切り替えました。

あなたの説明は、Windows OS で同様の Qt バージョンを使用しているように聞こえます。

于 2013-03-14T14:07:19.203 に答える