Назад | Перейти на главную страницу

Развертывание приложения node js, прослушивающего два отдельных порта под nginx

У меня есть простое приложение node.js, которое прослушивает два порта: на 8001 оно настраивает простой веб-сервер, выполнив

var express = require('express');
var gHttpApp = express();
gHttpApp.use(express.static('public'));
gHttpApp.listen(8080, function () {
    console.log('HTTP Server listening on *:8001');
});

Затем на 8002 он устанавливает socket.io

var io = require('socket.io')();
gSocket = io.listen(8002);

В моем index.html внутри папки / public я запрашиваю js клиента socket.io, выполнив:

<script src="http://localhost:8000/socket.io/socket.io.js"></script>

в то время как другой файл js запрашивается с относительным путем внутри / public.

Эта настройка работала при локальной разработке и казалась логичной, но я понятия не имею, как развернуть ее на моем частном сервере, на котором работают Ubuntu и nginx, поскольку я не могу перевернуть прокси-сервер того же места на 2 порта ...

Вам нужен обработчик маршрута для обслуживания "http: // локальный: 8000 / socket.io / socket.io.js".

Библиотека socket.io будет обслуживать этот файл автоматически с порта, на котором у вас установлен socket.io, но не с любого другого порта. Итак, в вашем случае это будет обслуживаться автоматически с порта 8082, а не с 8080.

Итак, вы, вероятно, могли бы изменить свой тег скрипта на:

<script src="http://localhost:8002/socket.io/socket.io.js"></script>

К вашему сведению, у вас может быть socket.io и ваш веб-сервер на одном порту. Нет необходимости использовать два отдельных порта. socket.io/webSocket явно предназначены для работы на том же порту, что и ваш веб-сервер. Это работает, потому что все соединения socket.io/webSocket в любом случае начинаются с HTTP-запроса. Итак, socket.io просто перехватывает этот первый HTTP-запрос для запуска соединения socket.io, а затем все остальные запросы обрабатываются вашим веб-сервером.