Развертывание узла 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 я запрашиваю клиента socket.io js, ​​выполнив:

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

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

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

1 ответ

Вам нужен обработчик маршрута, чтобы обслужить " http://localhost: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, а затем все остальные запросы обрабатываются вашим веб-сервером.

Другие вопросы по тегам