2011-09-12 23 views
10

Mam nadzieję, że to nie jest strasznie głupie pytanie, ale uczę się, jak zaimplementować serwer socket.io na mojej stronie internetowej do tworzenia aplikacji czasu rzeczywistego, ale moim problemem jest to, że nie mogę wymyślić, jak wdrożyć wspomniane aplikacje w środowisku serwerem Apache. Obecnie, kiedy uruchamiam node server.js, aby uruchomić mój serwer socket.io, muszę uzyskać do niego dostęp, odwiedzając http://localhost:XXXX, gdzie XXXX jest dowolnym portem, do którego go dołączam, oczywiście. Nie chcę, aby moja strona internetowa była zmuszana do oglądania na alternatywnym porcie podobnym do tego, ale oczywiście nie mogę podłączyć serwera do portu 80, ponieważ Apache słucha tego.Uzyskiwanie dostępu do serwera socket.io za pośrednictwem stron serwowanych Apache

Oczywiście naturalnym rozwiązaniem byłoby zatrzymanie usługi Apache, a następnie podłączenie serwera do portu 80 w ten sposób, aby uniknąć kolizji, ale nie chcę rezygnować z całej funkcjonalności oferowanej przez Apache. Zasadniczo chcę nadal udostępniać moją witrynę za pośrednictwem Apache na porcie 80 i zintegrować niektóre aspekty aplikacji czasu rzeczywistego za pośrednictwem socket.io na porcie 3000, powiedzmy.

Czy istnieje sposób, aby to zrobić, unikając rzeczy, których nie chcę? Te rzeczy to 1) posiadanie przez użytkowników dostępu do mojej witryny z :3000 w adresie URL, 2) wyłączenie Apache, 3) przy użyciu elementów iframe.

Z góry dziękuję.

Odpowiedz

3

Generalnie powinieneś być w stanie ukryć Node.js przy pomocy mod_proxy. Trochę wyszukiwania okazało się to: https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md (stary link umarł, to jest nowy)

Jednak Socket.io może być nieco finezyjny (https://github.com/LearnBoost/socket.io/issues/25), więc możesz mieć z tym problemy.

Ponieważ ten bilet jest nieco stary, warto spróbować. Tylko nie bądź zaskoczony, jeśli masz problemy. Kolejnym zakładem jest bind Node.js toport 80, który działa jako odwrotne proxy dla Apache z https://github.com/nodejitsu/node-http-proxy (nadal w dość niewielkim stopniu rozwoju).

Optymalnym rozwiązaniem byłoby uruchomienie go na swoim własnym serwerze i po prostu masz ruch w gnieździe przejdź do socket.example.com lub coś podobnego.

+0

Druga wymieniona metoda to to, co dotychczas wdrożyłem, chociaż wymagało to dość obszernej rekonfiguracji dyrektyw Apache. Teraz, po wdrożeniu, wydaje mi się, że cały proces jest sprzeczny z intuicją i tak naprawdę nie zbliżył mnie do tego, co muszę osiągnąć, poza powiązaniem obu serwerów z "tym samym" portem. Myślę, że będę wyglądał bardziej w mod_proxy i zobaczę, czy to nie jest bardziej rozważne rozwiązanie. Powtarzającym się problemem jest to, że nie muszę podawać całych dokumentów za pomocą socket.io .. po prostu WIDŻETY na wybranych stronach. "Przeniesiony div", jeśli chcesz. –

+0

Pierwszy wymieniony link jest martwy –

+0

Zaktualizowany nowym łączem –

2

Socket.io ma wiele mechanizmów transportowych. Niektóre z nich nie działają, jeśli uruchamiasz Apache jako serwer proxy, ale niektóre z nich działają. Transportami, które nie działają, są websocket i flash, ale powinno działać Xhr-polling i jsonp-polling.

Oto przykład na ustawienie opcji konfiguracji transporty dla socket.io:

var io = require("socket.io").listen(server); 
io.set("transports", ["xhr-polling", "jsonp-polling"]); 

na moim Apache używam normalnego name based virtual hosts and reverse proxy setup iz nich transportuje socket.io wydaje się działać.

Powiązane problemy