У меня есть приложение, которое использует веб-порты через socket.io. Для моего приложения я хотел бы использовать отдельный HTTP-сервер для обслуживания статического контента и JavaScript для моего приложения. Поэтому мне нужно установить прокси-сервер.Использование HTTP-прокси-сервера для подключения к прокси-серверу
Я использую node-http-proxy. В качестве отправной точки я мой WebSockets приложение работает на порт 8081. Я использую следующий код для повторного прямой связи Socket.io на этот автономный сервер, при использовании экспресса для обслуживания статического контента:
var http = require('http'),
httpProxy = require('http-proxy'),
express = require('express');
// create a server
var app = express();
var proxy = httpProxy.createProxyServer({ ws: true });
// proxy HTTP GET/POST
app.get('/socket.io/*', function(req, res) {
console.log("proxying GET request", req.url);
proxy.web(req, res, { target: 'http://localhost:8081'});
});
app.post('/socket.io/*', function(req, res) {
console.log("proxying POST request", req.url);
proxy.web(req, res, { target: 'http://localhost:8081'});
});
// Proxy websockets
app.on('upgrade', function (req, socket, head) {
console.log("proxying upgrade request", req.url);
proxy.ws(req, socket, head);
});
// serve static content
app.use('/', express.static(__dirname + "/public"));
app.listen(8080);
выше приложение работает очень хорошо, однако я вижу, что socket.io больше не использует веб-сайты, а вместо этого возвращается к опросу XHR.
Я могу подтвердить, что, глядя на журналы из кода прокси:
proxying GET request /socket.io/1/?t=1391781619101
proxying GET request /socket.io/1/xhr-polling/f-VVzPcV-7_IKJJtl6VN?t=13917816294
proxying POST request /socket.io/1/xhr-polling/f-VVzPcV-7_IKJJtl6VN?t=1391781629
proxying GET request /socket.io/1/xhr-polling/f-VVzPcV-7_IKJJtl6VN?t=13917816294
proxying GET request /socket.io/1/xhr-polling/f-VVzPcV-7_IKJJtl6VN?t=13917816294
Кто-нибудь знает, как прокси-связь веб-сокеты? Все примеры из node-http-proxy
предполагают, что вы хотите проксировать весь трафик, а не проксировать некоторых и обслуживать других.
Лично я использую nginx как http-сервер, так и прокси. Он отлично работает для проксирования через websocket (вот почему я переключился с apache). –
@dystroy спасибо за подсказку - хотя я надеялся на решение на основе узлов. Это значит, что разработчики могут иметь локальную настройку, которая отражает текущее развертывание. – ColinE