Schlechte Netzwerkleistung mit Websockets, die auf Apple-Geräten ausgeführt werden

8

Ich arbeite an einem HTML / Javascript, das auf mobilen Geräten läuft, die mit einer Qt / C ++ - Anwendung kommunizieren, die auf einem PC läuft. Sowohl das mobile Gerät als auch der PC befinden sich in einem lokalen Netzwerk. Die Kommunikation zwischen der HTML-Seite (Client) und der C ++ - App (Server) erfolgt über Websockets.

Die HTML-Seite ist eine Fernbedienung für die C ++ - Anwendung, daher ist eine Verbindung mit geringer Latenz zwischen dem mobilen Gerät und dem PC erforderlich.

Wenn Sie ein Nicht-Apple-Gerät als Client verwenden, werden Daten mit einer Rate zwischen 60 und 120 Bildern pro Sekunde gesendet, was völlig akzeptabel ist. Bei Verwendung eines Apple-Geräts fällt diese Rate auf 3-4 Bilder / Sek. Ich habe auch Ping-Zeiten überprüft (Websocket-Implementierung, kein Ping-Befehl von der Befehlszeile). Sie sind für Apple-Geräte akzeptabel (1-5 ms), solange das Gerät keine Daten überträgt. Wann immer Daten übertragen werden, erhöht sich diese Ping-Zeit auf 200 ms.

Wenn Sie von der Javascript-Seite aus schauen, senden die Apple-Geräte immer Daten mit einer konsistenten Rate von 60 Bildern / Sek., wie es bei anderen Geräten der Fall ist. Auf der Serverseite werden jedoch nur 3 bis 4 dieser 60 Frames empfangen, wenn der Client ein Apple-Gerät ist .

Hat jemand eine Idee, was passiert?

Hier ist mein Javascript-Code:

%Vor%

Daten werden von der Javascript-Seite mit der Funktion dendund () gesendet.

    
Mickaël C. Guimarães 30.01.2013, 17:17
quelle

2 Antworten

1

Wenige Ideen und Vorschläge.

  • Überprüfen Sie, ob das WebSocket-Protokoll des Clients vom Server unterstützt wird. Diese Frage und Antwort behandelt einen Fall, in dem verschiedene Protokollversionen ein Problem darstellten.
  • Der WebSocket Standard ermöglicht es Implementierungen, Übertragungen beliebig zu verzögern und Fragmentierung durchzuführen. Darüber hinaus unterstützen Steuerframes wie Ping keine Fragmentierung, dürfen jedoch eingefügt werden. Diese erlaubten Verhaltensunterschiede können zum Zeitunterschied beitragen.
  • Überprüfen Sie, ob das Attribut bufferedAmount auf dem WebSocket-Objekt den WebSocket-Status ermittelt Pufferung der Daten. Wenn das bufferedAmount -Attribut oft Null ist, wurden Daten an das Betriebssystem übergeben, das es basierend auf Betriebssystem- oder Socketkonfigurationen puffern kann, z. B. Nagle .
  • Diese Frage und Antwort erwähnt das Lösen von Verzögerungen, indem der Server Bestätigungen für jede Nachricht sendet.
  • Um einen tieferen Einblick in die Interaktionen zu erhalten, kann es nützlich sein, eine Paketverfolgung durchzuführen. Dieses technische F & A in der Mac Developer Library enthält möglicherweise einige Informationen dazu um das zu erreichen.
Tanner Sansbury 31.01.2013 18:49
quelle
1

Am besten nutzen Sie die AutobahnTestsuite . Sie können sowohl Clients als auch Server mit dieser Suite testen und herausfinden, wo sich Probleme befinden.

Ich habe QWebSockets erstellt, eine Qt-basierte WebSockets-Implementierung, und diese mehrfach verwendet, um Server zu erstellen. Die Leistung von Apple-Geräten ist ausgezeichnet.

Es scheint jedoch ein ernstes Problem mit Safari zu geben, wenn es um große Nachrichten geht (siehe Ссылка ). Vielleicht ist das das Problem.

    
Kurt Pattyn 10.08.2013 10:19
quelle