2017-03-15 25 views
8

Wdrażamy usługę, z której korzysta wielu użytkowników w tym samym czasie. W szczytach możemy mieć dziesiątki tysięcy ludzi online.Decyzja, czy używać prostych żądań HTTP, czy WebSockets

Krytyczna część naszej usługi wymaga reimplementacji, dlatego staramy się wymyślić nowe sposoby jej realizacji. W tej chwili mamy wysłać prostą i bardzo krótką małą prośbę HTTP/AJAX oparte na interakcji z użytkownikiem:

  • Ping: Jestem nadal aktywny
  • aktywny: Zrobiłem to i napisz go do bazy danych
  • wykończenie: muszę skończyć działalność więc zamknę żądań

Jednocześnie, w niektórych przypadkach (1 z 10) mamy otwartą EventSource z której czytamy pewnych modyfikacji na serwerze.

Pytanie brzmi, czy ten model jest wystarczająco dobry, czy lepiej jest otworzyć WebSocket i przekazać wszystko za pośrednictwem WebSockets.

  • Zaleta - dla każdego użytkownika utrzymywalibyśmy tylko jedno połączenie zamiast wysyłać wiele żądań.
  • Wada - gdy wiele ludzi w Internecie, chcielibyśmy zachować tysiące połączeń aktywnych

Jaka powinna być decyzja o właściwej realizacji?

Zauważono, że to pytanie odpowiada na to samo: WebSockets protocol vs HTTP - jednak proszę o konkretny przypadek użycia. Powiązane pytanie jest ogólnie zadawane.

+0

Możliwy duplikat [protokołu WebSockets vs HTTP] (http://stackoverflow.com/questions/14703627/websockets-protocol-vs-http) –

Odpowiedz

2
  • Wada - gdy wiele osób na forum, chcielibyśmy zachować tysiące połączeń aktywnych

można zaimplementować usługę zamknąć bezczynne połączenie websocket po przekroczeniu limitu czasu. To pewnie tak samo działa EventSource, więc nie zachowujesz zbyt wielu aktywnych połączeń. (podobne właściwości użytkowe.)

(Ale jeśli powołując się na automatycznym ponownym z EventSource dostarczonych przez przeglądarkę, a następnie przejście do websocket oznacza, że ​​trzeba pisać więcej kodu na logice włączeniem.)

Typowo WebSocket powinien generować mniejszy ruch w sieci. Ale jak duża różnica zależy od tego, w jaki sposób twoja obecna usługa jest zaimplementowana. Jeśli już zoptymalizowałeś swoją logikę i wycisnąłeś każdą wydajność z AJAX i EventSource, użycie WebSocket może być marginalnym ulepszeniem.

+0

Potrafi otworzyć gniazdo sieciowe i zamknąć je po upływie określonego czasu. Dzięki temu może wysłać polecenie ping przez gniazdo sieciowe, gdy użytkownik wykona określone działanie, np. Kliknięcie, ruch myszy lub naciśnięcie klawisza. w przeciwnym razie połączenie zostanie zamknięte. to lepsze niż otwieranie i zamykanie połączenia dużo IMHO. Potrafi rozwiązać problem wielu otwartych połączeń, skalując poziomo swój BackEnd, czyli dodatkowe ~ 65000 połączeń na instancję. –