Узел-http-proxy socket.io подключение к веб-сокету

Я пытаюсь заставить работать node-http-proxy с socket.io, но он всегда возвращается к xhr, websockets не будет работать, хотя я подключаюсь к событию обновления, как описано в node-http-proxy Docs.

var httpProxy = require ("http-proxy");

var server = httpProxy.createServer (function (req, res, proxy) {
    var buffer = httpProxy.buffer (req);
    proxy.proxyRequest (req, res, {
        host : "localhost",
        port : 8001,
        buffer : buffer
    });
});
server.listen (80);

server.on('upgrade', function (req, socket, head) {
    server.proxy.proxyWebSocketRequest(req, socket, head, { host : "localhost", port : 8001 });
});

Приложение, очевидно, работает на localhost:8001, и если я разрешу все методы транспорта, оно будет работать нормально, так как использует xhrs. Если я заставлю его использовать websockets, Firefox скажет

Firefox can't establish a connection to the server at ws://localhost/socket.io/1/websocket/cNp5J80KAWkXqjE6OZOt. @ http://localhost/socket.io/socket.io.js:2371

Просто используя метод по умолчанию

httpProxy.createServer (8001, "localhost").listen (80);

приводит к той же ошибке.

2 ответа

Решение

Проксирование веб-сокетов с помощью node-http-proxy, похоже, не работает на узле 0.10. Вот запрос на удаление, который пытается это исправить, но посмотрите мои комментарии: исправление также не работает полностью.

https://github.com/nodejitsu/node-http-proxy/pull/402

В настоящее время я использую (последний? V1.0.1) node-http-proxy, и я обнаружил, что Websockets действительно работал надежно после настройки (см. Ниже) на Node v0.10.20. По умолчанию, node-http-proxy, кажется, поддерживает xhr-опрос, в то же время отбрасывая соединения веб-сокетов.

В " примерах" я добавил флаг "ws"

var http = require('http'),
    httpProxy = require('../../lib/http-proxy');

httpProxy.createServer({
  target:'http://somehost.tld:5000',
  ws : true //added Websockets Flag TRUE
}).listen(80);//arbitrary port
Другие вопросы по тегам