2012-02-21 30 views
7

Więc staram się to uruchomić 2 dni i utknąłem. Jest to moja pierwsza konfiguracja serwera dla szyn używających NodeJS + Socket IO. Jestem noobem z NGINX i Unicorn. Zasadniczo część NodeJS + SocketIO mojej aplikacji będzie przekazywać wiadomości do użytkowników, którzy są połączeni z moją aplikacją. To jest mój nginx.confKonfiguracja NGINX do pracy z Socket.IO

server{ 
    listen 80 default; 
    root /home/deployer/saigon/public; 
    try_files $uri/index.html $uri @unicorn; 

    location /sockets { 
     proxy_pass http://localhost:3210; 
    } 

    location @unicorn { 
     proxy_pass http://localhost:3000; 
    } 
} 

I w moim production.rb, mam skonfigurowany adres URL, który użytkownik będzie musiał wysłać wiadomość do/odbieranie wiadomości od

SOCKET_IO_URL ='http://localhost:8080/sockets 

Dlaczego 8080? Używam Vagrant do przesyłania 8080 -> 80

Próbowałem uzyskać dostęp do http://localhost:8080/sockets i udało mi się uzyskać wiadomość powitalną gniazda. Spojrzałem na mój dziennik serwera NodeJS i otrzymałem wiadomości w porządku. Jednak jeśli chodzi o nadawanie ..... po prostu tego nie robi. Czy ktokolwiek kiedykolwiek dostał taką aplikację do pracy z konfiguracją, którą próbuję wykonać? Czy powinienem po prostu iść z Apache + Unicorn?

'

Odpowiedz

12

Updated Odpowiedź

I w końcu zorientowali się sposób, aby dostać tę pracę. Nie jest to wcale oczywiste, ale podczas hostowania socket.io w podfolderze NIE używasz podfolderu w instrukcji connect. To właśnie robiłem wcześniej i klient nigdy nie otrzymał odpowiedzi.

nie działa

<script src="/test/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080/test/', {resource:'test/socket.io'}); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

http://localhost:8080/test/ Jest to część, która rzuca rzeczy off. To tworzy przestrzeń nazw dla lokalnego gniazda, którego strona serwera nie respektuje. Tak więc klient wysyła wiadomość w przestrzeni nazw "/ test /", ale odpowiedzi serwera idą do pustej przestrzeni nazw, aby klient nigdy nie otrzymywał wiadomości. Obejście problemu polega na usunięciu "/ test /" i upewnieniu się, że używana jest zmienna zasobów na kliencie i serwerze.

Praca!

<script src="/test/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080', {resource:'test/socket.io'}); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

Mam nadzieję, że pomoże to w sprawnym działaniu.

Original Odpowiedź

Nie jest to problem z konfiguracją, to jest problem z socket.io nie chcąc pracować na sub folderu. Założę się, że zechcesz, że jeśli upuścisz/gniazdki, twój przykład będzie działał dobrze. Podczas korzystania z węzła http-proxy próbującego hostować połączenia socket.io w podfolderach napotkałem ten sam problem. Wystąpił błąd utworzony jakiś czas temu, ale został zamknięty i nigdy nie został rozwiązany.

https://github.com/LearnBoost/socket.io-client/issues/185

https://github.com/LearnBoost/socket.io/issues/320

ja wciąż szuka rozwiązania, jak również, ale mam wrażenie, że będę musiał zakasać rękawy i kopać w kodzie siebie.

+0

tak w zasadzie gniazdo/gniazdo.Io musi pozostać w folderze głównym, a następnie .... co oznacza, że ​​muszę wiedzieć, która prośba przechodzi do rails, a która będzie podłączona do gniazda io kiedy trafi root? = ___ = argh – denniss

+0

Na razie tak. Jeśli to możliwe, możesz zamiast tego użyć trasy subdomen. http://socket.domena.com/. Nie działa to dla mnie, ponieważ nie chcę wydawać więcej pieniędzy na certyfikat SSL dla subdomeny. –

+0

@denniss Zaktualizowałem moją odpowiedź z obejściem. Wciąż w to zagłębiając się, aby dowiedzieć się, czy jest to zamierzony projekt, czy błąd do naprawienia. –

Powiązane problemy