socket.io - XHR ankiet vs flashsocket i websocket

Używam node.js i socket.io. Mam problem z szybkością połączenia z socket.io. W Internet Explorerze i operze mam problem z szybkością połączenia. - Kiedy używam flashsocket lub websocket. Gdy korzystam ze środka transportu - połączenie XHR jest szybkie - we wszystkich przeglądarkach (IE, FF, Chrome, Opera).

Jaka jest różnica między środkiem transportu-XHR-polling a flash / websocket? Jaki jest najlepszy środek transportu? Jak zoptymalizować szybkość połączenia na socket.io?

Dzięki za radę!

Author: Jenan, 2012-01-10

2 answers

Byłbym zaskoczony, gdyby ogólna prędkość połączenia w czasie była różna między przeglądarkami internetowymi, ale powodem, dla którego zobaczysz opóźnienie w początkowym połączeniu w Internet Explorer i w Operze, jest to, że natywna obsługa WebSocket nie jest dostępna, ponieważ została domyślnie wyłączona. Tak więc, jeśli wybierzesz FlashSocket, przed nawiązaniem połączenia trzeba będzie pobrać dodatkowy obiekt Flash (plik SWF).

WebSockets są wprowadzane w IE10, a w Operze są dostępne, ale domyślnie wyłączone.

Jaka jest różnica między środkiem transportu-XHR-polling a flash / websocket?

  • XHR-ankieta-zobacz http://en.wikipedia.org/wiki/Push_technology#Long_polling
  • połączenie FlashSocket-używa obiektu gniazda Flash do nawiązania połączenia z serwerem WebSocket i komunikuje się za pomocą protokołu WebSocket. Oznacza to, że istnieje interakcja między Flashem a JavaScript, a także oznacza należy pobrać dodatkowy obiekt Flash (pliki SWF).

Jaki jest najlepszy środek transportu?

WebSockets dla każdej przeglądarki internetowej, która natywnie ją obsługuje (Chrome, Firefox, Safari). Jeśli obiekt Flash (plik SWF) znajduje się w pamięci podręcznej przeglądarki, połączenie powinno być szybkie. Jeśli nie, to będzie opóźnienie. XHR Long-ankieta jest dobrym rozwiązaniem i będzie działać między przeglądarkami, ale są negatywy:

  • pomiędzy zapytaniami ankiety o dane na wyświetlaczu może być nieaktualny (czerstwy).
  • Jest to mniej efektywna metoda połączenia niż pojedyncze połączenie TCP używane przez WebSockets, ponieważ Long-Polling HTTP wykorzystuje wiele połączeń do symulacji dwukierunkowej funkcjonalności.]}
  • HTTP ma narzut, co oznacza, że dodatkowe informacje nagłówka są wysyłane na żądanie i każde kolejne żądanie.

Jak zoptymalizować szybkość połączenia jest socket.io?

(I ' m pretty new to socket.io do tego jest tylko sugestia)

Spojrzałbym na konfigurowanie Socket.io docs i sprawdź, czy możesz warunkowo ustawić transports w oparciu o przeglądarkę, która się łączy. Na podstawie Twoich doświadczeń może to być:

  • Chrome, Firefox, Safari - WebSockets
  • IE, Opera-XHR-ankieta
 30
Author: leggetter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-10 22:27:47

Aby skrócić czas połączenia, możesz spróbować skrócić czas połączenia (który domyślnie wynosi 10 sekund) za pomocą parametru "connect timeout".

Na przykład, aby zmniejszyć limit czasu połączenia do 1 sekundy:

socket = io.connect('http://your-site.com',{'connect timeout': 1000});
 5
Author: leszek.hanusz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-11 14:54:52