Odpowiedzi:
Zaktualizowana odpowiedź
Krótka odpowiedź : tak, ale jest droga.
Długa odpowiedź :
To pytanie nie jest unikalne dla WebSockets, ponieważ WebSockets są zasadniczo długowiecznymi gniazdami TCP z uzgadnianiem podobnym do HTTP i minimalnym ramkami dla wiadomości.
Prawdziwe pytanie brzmi: czy pojedynczy serwer mógłby obsłużyć 1 000 000 równoczesnych połączeń przez gniazdo i jakie zasoby serwera by to wymagało? Odpowiedź komplikuje kilka czynników, ale dla systemu o odpowiedniej wielkości (dużo procesora, pamięci RAM i szybka sieć) oraz ze dostrojonym systemem serwera i zoptymalizowanym oprogramowaniem serwera możliwe jest 1.000.000 jednoczesnych połączeń przez gniazdo.
Liczba połączeń nie jest głównym problemem (jest to głównie kwestia dostrojenia jądra i wystarczającej ilości pamięci), jest to przetwarzanie i wysyłanie / odbieranie danych do / z każdego z tych połączeń. Jeśli połączenia przychodzące są rozłożone na długi okres i są przeważnie bezczynne lub rzadko wysyłają małe fragmenty danych statycznych, prawdopodobnie możesz uzyskać znacznie więcej niż nawet 1000000 jednoczesnych połączeń. Jednak nawet w takich warunkach (powolne połączenia, które w większości są bezczynne) nadal będziesz mieć problemy z sieciami, systemami serwerów i bibliotekami serwerów, które nie są skonfigurowane i nie są zaprojektowane do obsługi dużej liczby połączeń.
Zobacz odpowiedź Alessandro Alinone na temat przybliżonego wykorzystania zasobów dla 500 000 połączeń.
Oto kilka starszych, ale wciąż odpowiednich zasobów, w których można przeczytać, jak skonfigurować serwer i napisać oprogramowanie serwera do obsługi dużej liczby połączeń:
We współczesnych systemach obsługa 1 miliona jednoczesnych połączeń TCP nie stanowi problemu.
Mogę to potwierdzić na podstawie naszych własnych testów (pełne ujawnienie: jestem CTO w Lightstreamer).
Kilkakrotnie musieliśmy zademonstrować niektórym naszym klientom, że na jednym urządzeniu można osiągnąć 1 milion połączeń (niekoniecznie na super-potwornej maszynie). Ale pozwólcie mi podsumować konfigurację, w której testowaliśmy 500 tys. Jednoczesnych połączeń, ponieważ jest to znacznie nowszy test przeprowadzony na Amazon EC2.
Zainstalowaliśmy Lightstreamer Server (który jest między innymi serwerem WebSocket) na instancji m2.4xlarge. Oznacza to 8 rdzeni i 68,4 GiB pamięci.
Uruchomiliśmy 11 maszyn klienckich, aby utworzyć 500 000 jednoczesnych połączeń z serwerem Lightstreamer. Test został skonfigurowany tak, aby łączna przepustowość wychodząca z serwera wynosiła 90 000 aktualizacji / s, co skutkowało szczytową przepustowością wychodzącą 450 Mbit / s.
Serwer nigdy nie używał więcej niż 13 GiB pamięci RAM, a procesor był stabilny na poziomie około 60%.
Mając co najmniej 30 GiB pamięci RAM, możesz obsłużyć 1 milion równoległych gniazd. Wymagany procesor zależy od wymaganej przepustowości danych.