2013-11-03 13 views
5

Zajmuję się tworzeniem aplikacji wyświetlającej dane w czasie rzeczywistym (wykresy itp.) Z Redis. Zaktualizowane dane przychodzą do Redis bardzo szybko (milisekundy). Więc byłoby sensownie pokazywać aktualizacje tak często, jak to możliwe (o ile ludzkie oko to zauważy).Real-Time z Node.js: WebSocket + Polling po stronie serwera vs. Polling po stronie klienta

Technologia stosu:

  • node.js jako serwer WWW
  • Redis, który przechowuje dane
  • JavaScript/HTML (angularjs) jako klient

Teraz mam odpytywanie po stronie klienta (żądania GET do serwera Node.js co sekundę, która wysyła zapytania do Redis o aktualizacje).

Czy istnieje przewaga zamiast wykonywania pollingu po stronie serwera i udostępniania aktualizacji za pomocą WebSocket? Każde połączenie WebSocket będzie wymagało osobnej ankiety Node.js (setInterval), ponieważ zapytania klienta mogą być różne. Ale nie oczekuje się więcej niż 100 połączeń WebSocket.

Jakieś plusy/minusy między tymi dwoma podejściami?

Odpowiedz

5

Gdybym zrozumiał swoje pytanie poprawnie: masz mniej niż 100 użytkowników, którzy będą korzystać z zasobów jednocześnie, a chcesz dowiedzieć się, co może być lepszy sposób, aby dać im aktualizacje:

  • klientów zapytaj o aktualizacje przez żądanie time-out (1 na sekundę).
  • Serwer śledzi klientów i gdy pojawia się aktualizacja, wydaje im aktualizację.

Uważam, że najlepsze rozwiązanie zależy od posiadanych danych i od tego, jak ważne są dla użytkowników dane.

pójdę z po stronie klienta, jeśli:

  • ludzi nie obchodzi, czy ich dane są trochę nieświeży
  • nie byłoby w przybliżeniu więcej niż 1 aktualizacji w tym 1 sekundę
  • I nie mają czasu do modyfikowania kodu

pójdę z po stronie serwera, jeżeli:

  • ważne jest posiadanie aktualnych danych, a użytkownicy nie mogą tolerować opóźnień.
  • aktualizacje nie są tak częste (jeśli na przykład mamy aktualizacje tylko raz na minutę, przydatne byłoby tylko 1 na 60 żądanie po stronie klienta. I tutaj serwer wyda tylko jedną aktualizację)

Jedną dobrą rzeczą jest to, że plik node.js ma już w tym celu znakomitą bibliotekę socket.io.

+1

Dzięki za odpowiedź. Jest to aplikacja działająca w czasie rzeczywistym i zawsze są aktualizacje. Zaktualizowane dane przychodzą do Redis bardzo szybko (milisekundy). Więc byłoby sensownie pokazywać aktualizacje tak często, jak to możliwe (o ile ludzkie oko to zauważy). – webdev

+0

Ta odpowiedź powinna zostać przyjęta. – Chev

+0

Gotowe. Dzięki za wspaniałą odpowiedź. – webdev

Powiązane problemy