Как мне общаться в чате Node / Socket.io, когда он находится в домене? - PullRequest
5 голосов
/ 16 июня 2011

Я успешно написал очень простой чат в реальном времени из Node JS и Socket.io. Он также использует Express, Jade и Stylus - которые я хочу развивать дальше.

Текущий код для этого здесь (это работает локально): https://github.com/littlejim84/basic_node_socket

Это все работает нормально и работает, как и ожидалось, на моей локальной машине. Запустив приложение Node и выбрав http://localhost:9000/, все работает как положено. Но когда я установил его на своем удаленном сервере, сокет не подключался. Я настроил Ngnix для сервера моего Node-приложения, примерно так:

upstream basic_node_socket { 
    server 127.0.0.1:9000; 
} 

server { 
    listen   80; 
    server_name  example.com; 

    location /basic_node_socket { 
        root /var/www/example.com/basic_node_socket; 

        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header Host $http_host; 
        proxy_set_header X-NginX-Proxy true; 

        proxy_pass http://basic_node_socket/; 
        proxy_redirect off; 
    } 
} 

С этим я мог перейти на веб-адрес, и он, как и ожидалось, запустил бы мое приложение Node, но сокет просто не подключился. Я предполагаю, что это потому, что на стороне клиента я сейчас слушаю порт 9000, который, возможно, уже не имеет значения, теперь он обслуживается таким образом?

В моем клиентском скрипте у меня есть это (которое работает локально):

socket = new io.Socket(null, {port: 9000});

Я не эксперт в Node, я пытаюсь обернуть голову вокруг него. Может кто-нибудь помочь мне заставить это работать должным образом на моем удаленном сервере?

Любая помощь будет принята с благодарностью.

UPDATE: Я видел эту ссылку, которая, кажется, подробно описывает мою проблему: http://community.webfaction.com/questions/3448/using-websockets-with-a-nodejs-custom-app

... это нормально, и я понимаю, что мне, вероятно, понадобится выделенный IP-адрес, чтобы я мог запустить Node исключительно на порту 80, и одно из моих доменных имен указывало бы на этот IP-адрес (или я мог бы использовать что-то вроде Nodestar). Но я хочу оставить все на своем VPS. Это кажется хорошим, если у меня запущено одно приложение Node. Но что, если я хочу, чтобы два или три приложения Node JS работали на этом новом выделенном IP-адресе? Это бит, который я не понимаю. Я видел различные настройки vhost-типа для Node JS, но я не совсем уверен, как лучше это реализовать.

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Я не уверен, что это ваша проблема, и я не имел дело с этим из первых рук, но, насколько я понимаю, вы не можете использовать прокси-сокеты с nginx. Вероятно, поэтому у вас проблемы с веб-сокетами, но не с другими запросами.

Попробуйте использовать: https://github.com/nodejitsu/node-http-proxy

Я также слышал, что lighttpd работает с веб-сокетами.

0 голосов
/ 20 июня 2011

Что касается ошибки, произошедшей с Socket.IO, если вы запускаете приложение на порте 9000 с nginx на порте 80, вам нужно будет указать клиентской стороне использовать порт 80, а НЕ порт 9000.

Вы можете посмотреть на node-http-proxy с помощью простой карты поиска proxyTable.Чтобы сопоставить порт 80 нескольким сайтам.

Вы также можете посмотреть на nodeter.com, он предоставит вам хостинговую платформу node.js.

0 голосов
/ 17 июня 2011

Вы можете запустить один http-сервер и направить запрос на основе домена или другой информации в запросе.Используя этот метод, вы можете обслуживать совершенно разные сайты для разных доменов, которые используют один и тот же IP-адрес на одном сервере.Вероятно, модуль или два доступны, чтобы помочь вам в этом.Что касается нескольких экземпляров socket.io, вы можете запустить http-серверы на разных портах и ​​использовать их для запуска необходимого количества экземпляров socket.io на одном компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...