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.
Wenige Ideen und Vorschläge.
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 . 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.
Tags und Links javascript c++ websocket boost-asio