Seite 1 von 1

Latenz von QTcpSockets (Qt4)

Verfasst: 24. April 2006 15:44
von caetydid
Ich möchte mittels eines Servers unidirektional Daten an mehrere Clients verschicken.
Dabei stellt der Server (abgeleitet von QTcpServer) einen Stream zur Verfügung.
Bei einkommenden Verbindungen (Client verbindet sich) liefert der Server auf den entsprechenden QTcpSockets diese Daten.

Das ganze funktioniert soweit wunderbar, aber die Latenzzeit ist mir zu hoch.
Ich bräuchte diese Daten möglichst ohne Zeitverlust (die Pakete sind klein, ca 100 Bytes) und das ganze soll auch nur im Intranet funktionieren.

Ein Client, der WinSockets verwendet habe ich auch schon geschrieben, dort treten keine nennenswerten Verzögerungen auf.
Ich würde den Client aber auch gern in Qt schreiben.

Die Verzögerungen, die ich erhalte bewegen sich im Bereich von 2 bis 10 Sekunden, ich hätte gerne Verzögerungen < 1/4 Sekunden.
Kann man das überhaupt garantieren?

Ich habe setReadBufferSize() im QTcpSocket des Clients auf 2*Paketgröße gesetzt, aber die Daten sind trotzdem noch verzögert.
Weiß jemand wie man da vorgehen sollte?

vielen Dank,
Stefan K. >8^)

Re: Latenz von QTcpSockets (Qt4)

Verfasst: 24. April 2006 16:51
von patrik08
caetydid hat geschrieben: Die Verzögerungen, die ich erhalte bewegen sich im Bereich von 2 bis 10 Sekunden, ich hätte gerne Verzögerungen < 1/4 Sekunden.
Kann man das überhaupt garantieren?
Stefan K. >8^)
ca 100 Bytes....
unter eine sekunden .... unidirektional LDAP... oder libcurl
..... bidirektional Webdav (auch libcurl)
alles auf port 80 ... keine firewall probleme..

etwas schnelleres ist spekulation.... oder zu aufwendig...

Verfasst: 24. April 2006 20:12
von Tarek
Der Sendevorgang beginnt erst beim Wiedereintritt in die Ereigniswarteschlange. Wenn die Funktion in der die Daten an den Socket übergeben werden also noch etwas länger ist solltest du vielleicht mal flush() aufrufen.

gelöst....

Verfasst: 25. April 2006 15:40
von caetydid
Also, vielen Dank für die Antworten, aber das Problem war wohl ein anderes:

Ich habe jedes Mal wenn der QTcpSocket neue Daten reinbekam insgesamt sechs QLineEdits mit Werten aktualisiert.
Offenbar wird mit setText() die Änderung sofort (auch visuell) aktiv, und nicht wie ich dachte, erst nach gewisser Zeit ein PaintEvent ausgelöst.
Zumindest waren diese ca. 600 LineEdits pro Sekunde wohl zu viel und haben diese Latenz verursacht!

Habe jetzt einen QTimer benutzt, um die UI nur alle 100ms zu aktualisieren, und die Verzögerungen sind nicht mehr nennenswert.