Я успешно написал очень простой чат в реальном времени из 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, но я не совсем уверен, как лучше это реализовать.