2013-07-12 13 views
13

Czy ten nagłówek HTTP nie spowoduje również, że połączenie pozostanie otwarte przez długi czas? Więc jaka jest korzyść?W jaki sposób websocket różni się od http z połączeniem nagłówka-keep-alive = million

Czy ktoś może mi wyjaśnić? Wydaje mi się, że tęskniłem za tą koncepcją.

+0

Linki, które pomogły mi: http://stackoverflow.com/questions/10028770/html5-websocket-vs-long-polling-vs-ajax ------- http://stackoverflow.com/questions/ 11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet –

+0

"Na przykład w węźle node.js można udostępniać tę samą pamięć dla różnych połączeń gniazd, dzięki czemu mogą uzyskiwać dostęp do zmiennych współdzielonych. Nie musisz więc używać bazy danych jako punktu wymiany w środku (np. Z AJAX lub Long Polling i na przykład PHP). Możesz przechowywać dane w pamięci RAM lub nawet ponownie opublikować między gniazdami od razu. " –

+0

http://stackoverflow.com/questions/10028770/html5-websocket-vs-long-polling-vs-ajax –

Odpowiedz

14

Na poziomie TCP/IP wygląda tak samo: gniazdo jest otwarte.

Ale z punktu widzenia przeglądarki są zupełnie inne. Keep-alive służy przeglądarce do ponownego wykorzystania w celu żądania większej ilości treści (np. Obrazów, plików css, następnej strony w witrynie). WebSockets służy do dwukierunkowej komunikacji od w twoim kodzie aplikacji JavaScript pod numerem. Serwer może wybrać wysyłanie treści w dowolnym momencie. Twoja aplikacja JS może wysyłać dane do serwera w dowolnym momencie.

Warto również porównać do SSE (inaczej EventSource), który pozwala również serwerowi wybrać wysyłanie treści w dowolnym momencie, ale jest jednokierunkowy (Twoja aplikacja JS musi uciekać się do używania XHR, kiedy musi wysłać więcej danych). (Pełne porównanie WebSockets i SSE może być bardzo skomplikowane, więc nie powiem nic więcej tutaj, z wyjątkiem stwierdzenia, że ​​SSE może często być właściwym wyborem.)

Porównaj również do Server Push w HTTP/2 (aka SPDY). Ma to na celu proaktywne przekazywanie plików przez serwer (obrazy, pliki css, następna strona na stronie), ale jest znowu na poziomie przeglądarki, nie jest kontrolowane przez Javascript.

+0

TAK, mówisz, że w treści: utrzymaj serwer żywy wysyła dane tylko wtedy, gdy przeglądarka go zażąda. Które stale żąda, gdy połączenie jest otwarte, podczas gdy w przeglądarce gniazda sieciowego nie musi żądać, aby serwer mógł wysyłać, kiedy chce. AND, możesz ręcznie zażądać/wysłać serwer do wysłania, jeśli zajdzie taka potrzeba. –

+0

Nie sądzę, że przeglądarka będzie "wymagać ciągłego". (Chociaż gdybyś miał pętlę javascript, która co sekundę ładowałaby nowy obraz, to przypuszczam, że byłaby zajęta.) Pamiętaj również, że http/1.1 zwykle tworzy 6 połączeń z serwerem, jeśli jest dużo treści do pobrania. (Zdaję sobie sprawę, że twoje pytanie było teoretyczne, ale bardzo długi czas utrzymywania jest prawie na pewno złym pomysłem, ogólnie rzecz biorąc.) –

+0

Myślę, że dostałem to, nawet w długim pollingu/http .. dla klienta, aby komunikować się z serwerem to musi wysłać http req. Serwer może jednak rozmawiać z klientem. Jednak czas oczekiwania na połączenie i musi zostać w końcu niepotrzebnie połączony. Ale widzę ludzi mówiących, że websocket pozwala większej liczbie klientów dzielić przestrzeń. Jak to działa. –

Powiązane problemy