2014-10-15 8 views
5

Ich benutze WebSockets, um einen Javascript WebSocket Client mit einem Java WebSocketServer (von einer Android Anwendung) zu verbinden, unter Verwendung der Java-WebSocket Bibliothek. Die Android-App sendet alle paar Millisekunden eine kleine Nachricht an den JavaScript-Client.Der beste Weg, um Nagle-Algorithmus-Effekte mit WebSockets zu vermeiden?

den Modul Basis (und intuitiven) Ansatz für diese Situation ist die Verzögerung zwischen empfangenen Nachrichten, in dem JavaScript-Client anzeigen gemessen (aproximately) das folgende Muster: 200 ms, 0,1 ms, 0,1 ms, 0,1 ms, 0,1 ms , 0,1 ms, 0,1 ms, 200 ms, 0,1 ms, 0,1 ms, 0,1 ms, 0,1 ms, 0,1 ms, 0,1 ms, 200 ms, 0,1 ms, 0,1 ms, 0,1 ms, 0,1 ms, 0,1 ms, 0,1 ms. .

Dies ist der Effekt des Nagle-Algorithmus, der standardmäßig eingestellt ist und mehrere Nachrichten vor dem Senden zusammenfasst.

Da ich keinen Weg gefunden habe, seine Deaktivierung zu garantieren, folge ich der in this alten Frage vorgeschlagenen Methode, eine Bestätigungsnachricht vom Client an den Server zu senden, und das System verhält sich ordnungsgemäß, aber da die Bestätigungsmeldung keine hat echter Zweck (es ist mehr ein Hack), sollte es vermieden werden.

Die Frage ist, das bleibt die beste Lösung für dieses Problem? Weißt du irgendeinen Weg, das Klumpen zu vermeiden?

Vielen Dank.

+0

In .NET gibt es eine Einstellung im Socket-Objekt, um den Nagle-Algorithmus zu deaktivieren, wahrscheinlich gibt es in Java etwas Ähnliches. – vtortola

+0

Gibt es eine '.flush()' Methode für den Socket, die Sie nach dem Schreiben aufrufen können? – jfriend00

+1

Haben Sie ['setTcpNoDelay()'] (http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setTcpNoDelay (boolean)) in Ihrer Bibliothek? – jfriend00

Antwort

0

Da in der verwendeten Bibliothek keine Flush- oder setTCPNoDelay-Mechanismen vorhanden sind und keine anderen Lösungen vorgeschlagen wurden, scheint die Lösung der Bestätigungsnachricht als beste Lösung für dieses Problem gültig zu sein.

Verwandte Themen