node-http-proxy socket.io websocket连接

node-http-proxy socket.io websocket连接

问题描述:

我试图让socket.io与node-http-proxy一起工作,但它总是回退到xhr,websockets将无法工作,虽然我正在连接到node-http-proxy文档中描述的升级事件。node-http-proxy socket.io websocket连接

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); 

导致同样的错误。

+0

您没有相同的代码在所有我已经......你能链接在哪里找到代码中的文档?同时你可以看看我的代码[这个答案](http://*.com/questions/15411042/how-to-run-node-js-app-on-port-80-using-http-proxy/15427378#15427378)这对我很有用。如果仅将它与一个域一起使用,则可以删除switch-statement。 – 2013-03-21 14:22:52

+0

我从这里得到了代码:https://github.com/nodejitsu/node-http-proxy#proxying-websockets(我在那里的缓冲线有一个实验剩余的余量,我现在将其删除:/) With你的代码我仍然有同样的问题。 难道是版本问题?我正在运行node-http-proxy 0.10.0,socket.io 0.9.13和节点0.10.0。 – tom 2013-03-21 17:07:08

使用node-http-proxy代理websockets似乎在节点0.10上被破坏。这里有一个试图解决它的拉取请求,但看到我的评论:修复也没有完全工作。

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

+0

Thx David ...我想知道为什么我的应用程序无法在新的node.js安装上工作-.- – ayk 2013-04-20 16:12:29

我目前使用的(最新的?V1.0.1)节点的HTTP代理,我发现的WebSockets确系可靠的一个调整后的节点v0.10.20工作(见下文)。默认情况下,node-http-proxy似乎支持xhr-polling,同时删除websocket连接。

在“examples”,我加入了“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