2014-10-15 22 views
5

Używam webSockets do podłączenia klienta webSocket javascript do java webSocketServer (z aplikacji Android), używając biblioteki Java-WebSocket. Aplikacja na Androida co kilka milisekund przesyła małą wiadomość do klienta javascript.Najlepszy sposób na uniknięcie efektów algorytmu Nagle za pomocą webSockets?

Stosując podstawowe (i intuicyjne) podejście do tej sytuacji, opóźnienie między otrzymanymi wiadomościami, mierzone wewnątrz klienta javascript pokazuje (w przybliżeniu) następujący wzór: 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 ..

Jest to efekt algorytmu Nagle, który jest domyślnie ustawiony, zbijając kilka komunikatów przed ich wysłaniem.

Ponieważ nie znalazłem sposobu na zagwarantowanie jej dezaktywacji, postępuję zgodnie z podejściem zaproponowanym w this stare pytanie, wysyłając wiadomość potwierdzającą od klienta do serwera, a system zachowuje się prawidłowo, ale ponieważ komunikat potwierdzenia nie ma prawdziwy cel (to raczej hack), należy go unikać.

Pytanie brzmi, czy to jest najlepsze rozwiązanie tego problemu? Czy znasz jakiś sposób, aby uniknąć zbijania się?

Dziękuję.

+0

W .NET jest ustawienie w obiekcie gniazda, aby wyłączyć algorytm nagle, prawdopodobnie jest coś podobnego w Javie. – vtortola

+0

Czy istnieje metoda '.flush()' na gnieździe, do którego możesz zadzwonić po zapisaniu? – jfriend00

+1

Czy masz dostęp do ['setTcpNoDelay()'] (http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setTcpNoDelay (boolean)) w swojej bibliotece? – jfriend00

Odpowiedz

0

Ponieważ wydaje się, że w używanej bibliotece nie ma mechanizmów płukania ani setTCPNoDelay i nie zaproponowano żadnych innych rozwiązań, wydaje się, że rozwiązanie z potwierdzeniem wiadomości pozostaje aktualne jako najlepsze rozwiązanie tego problemu.

Powiązane problemy