2013-04-04 14 views
13

Czytam na SockJS node server. Dokumentacja mówi:Jakie są problemy z używaniem WebSockets z serwerami proxy i równoważnikami obciążenia?

Często WebSockets nie grają ładnie z serwerami proxy i load balancers. Wdrożenie serwera SockJS za Nginx lub Apache może być bolesne. Na szczęście najnowsze wersje znakomitego load balancer HAProxy są w stanie zaimplementować połączenia proxy z WebSocket. Proponujemy umieszczenie HAProxy jako front load loader i wykorzystanie go do podziału ruchu SockJS z normalnych danych HTTP.

Jestem ciekawy, czy ktoś może rozwinąć problem, który jest rozwiązywany przez HAProxy w tym przypadku? W szczególności:

  1. Dlaczego websy nie grają dobrze z serwerami proxy i równoważnikami obciążenia?
  2. Dlaczego wdrożenie serwera Sockjs za Apache jest bolesne?

Odpowiedz

16

1. Dlaczego internet nie gra ładnie z serwerami proxy i równoważnikami obciążenia?

Polecam przeczytać ten artykuł na How HTML5 Web Sockets Interact With Proxy Servers przez Peter Lubbers. Powinien on obejmować wszystko, co musisz wiedzieć o WebSocket i serwerach proxy - i tym samym równoważniki obciążenia.

2. Dlaczego wdrożenie serwera Sockjs za Apache jest bolesne?

Jest a module for handling WebSocket connections ale obecnie Apache nie natywnie wspierać websocket, ani też nie będzie to wyglądać w najbliższym czasie na podstawie tego błędu zgłoszonego apache - HTML5 Websocket implementation. Sugeruje się, że faktycznie lepiej pasuje do wzoru modułu.

Jest to "bolesne" tylko dlatego, że nie jest łatwe - nie ma oficjalnego wsparcia, a zatem nie ma ono zastosowania w społeczności, które w przeciwnym razie może mieć.

Możliwe, że inne bóle w SockJS mają transport powrotny oparty na HTTP. Musisz więc proxy zarówno połączenia WebSocket (przy użyciu modułu Apache-Websocket), jak i żądania HTTP, gdy używany jest zastępczy.

Powiązane z tym: Nginx v1.3 was released w lutym z obsługą WebSocket.

+0

Dziękuję, artykuł Petera Lumbbersa jest bardzo pouczający. Czy wszyscy, którzy korzystają z Apache i używają gniazd internetowych, musieli zainstalować moduł Apache-Websocket, do którego się odnosisz? Czy ten moduł jest wymagany, jeśli korzystasz z bibliotek takich jak socket.io lub sockjs? –

+0

Nie trzeba instalować modułu, nie. Możesz uruchomić infrastrukturę czasu rzeczywistego równolegle ze standardowym stosem sieci. Tak więc, z socket.Io/sockjs - nie, moduł nie jest wymagany. – leggetter

+0

To prawda, ponieważ socket.io i sockjs używają serwerów uruchamianych na węźle node.js, a nie na Apache. –

Powiązane problemy