2013-08-18 5 views
3

Они являются версии узла и необходимые модули я использую:через прокси-соединения WebSockets узла-HTTP-прокси не работает

Когда я запускаю следующую программу мой вывод консоли выглядит следующим образом, и не выйти за пределы этот пункт:

$ node app.js 
proxy: got upgrade, proxying web request 
wss: got connection 

Вот код:

// app.js 
// A simple proxying example 
// 
// Setup websocket server on port 19000 
// Setup proxy on port 9000 to proxy to 19000 
// Make a websocket request to 9000 
// 

var WebSocket = require('ws'), 
    WebSocketServer = WebSocket.Server, 
    proxy = require('http-proxy'); 

// goes in a loop sending messages to the server as soon as 
// the servers are setup 
var triggerClient = function() { 
    var ws = new WebSocket('ws://localhost:9090/'); 
    ws.on('open', function() { 
     console.log('ws: connection open'); 
     setInterval(function() { 
      ws.send("Hello"); 
     }, 1000); 
    }); 

    ws.on('message', function(data) { 
     console.log('ws: got ' + data); 
    }); 
} 

// setup websocket server and a proxy 
// 
var go = function() { 
    // setup a websocket server on port 19000 
    // 
    var wss = new WebSocketServer({ port: 19000 }); 
    wss.on('connection', function(ws) { 
     console.log('wss: got connection'); 
     ws.on('message', function(data) { 
      console.log('wss: got ' + data); 
      ws.send('wss response: ' + data); 
     }); 
    }); 


    // setup a proxy server 
    var server = proxy.createServer(function (req, res, proxy) { 
     proxy.proxyRequest(req, res, { 
      host: 'localhost', 
      port: 19000 
     }); 
    }); 

    server.on('upgrade', function (req, socket, head) { 
     console.log('proxy: got upgrade, proxying web request'); 
     server.proxy.proxyWebSocketRequest(req, socket, head, { 
      host: 'localhost', 
      port: 19000 
     }); 
    }); 

    server.listen(9090, triggerClient); 
}; 

process.nextTick(go); 

Моя проблема в конце концов, началась, когда я пытался использовать hipache, я тогда упростили вещи к узлу-HTTP-прокси, а затем, наконец, этот кусок кода.

Если вы изменили порт, с которым клиент WebSocket соединяется с 9090 по 19000 (тем самым минуя прокси), все работает нормально.

Любые предложения, указатели, обратная связь будет принята с благодарностью.

Спасибо!

+0

Похоже на то, что сейчас работает, как описано здесь: http://stackoverflow.com/questions/16503349/node-http-proxy-with-proxytable-and-websockets – verma

ответ

1

Основная проблема заключается в том, что мастер-ветвь узла-HTTP-прокси совместим только с узлом < = 0.8.x (см https://github.com/nodejitsu/node-http-proxy#when-to-use-node-http-proxy): есть дерево, которое реализует поддержку 0.10.x (см https://github.com/nodejitsu/node-http-proxy/tree/caronte), но это ISN 't mainline branch, и я не нашел никаких признаков того, когда он будет объединен и доступен.