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.
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 –
"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. " –
http://stackoverflow.com/questions/10028770/html5-websocket-vs-long-polling-vs-ajax –