我试图让websockets也与node-http-proxy
工作。不同之处在于我使用了一个代理:
var options = {
router: {
'a.websterten.com': '127.0.0.1:150',
'b.websterten.com' : '127.0.0.1:151',
}
};
var server = httpProxy.createServer(options);
我试着:
server.on('upgrade', function (req, socket, head) {
server.proxy.proxyWebSocketRequest(req, socket, head);
});
但它似乎不起作用。快速检查查看websockets工作是否显示我从Chrome获得Unexpected response code: 400
(如果我直接去工作很好)
也做了几个检查server.on('upgrade',..
不触发websocket请求
我怎么能让我的代理服务器路由正确的websockets ?
我也在节点0.8.23和节点0.10上尝试了这个。X(后续版本的node有内存泄漏问题,但它也不能在0.8.23上工作)
当您使用httpProxy.createServer()
时,不需要处理upgrade
事件,因为http-proxy会自动处理它。因此,您的server.on('upgrade', ...)
永远不会触发,因为http-proxy已经在内部处理它了。
你需要做server.on('upgrade')
的唯一时间是当你传递中间件功能到httpProxy.createServer
,或者如果你用http.createServer()
手动创建了服务器。
换句话说,websockets应该通过你配置中的代理"工作"。
然而,在节点v0.10上,http-proxy中的 WebSocket支持目前破碎。因为streams2 (node core中的流api在0.10中被完全重写)。也是,最新版本的http-proxy(0.10.2)在节点v0.8中被破坏,因为修复了streams2问题。
你有两个选择:
- 等待http-proxy重写其内部来处理流。
- 降级到节点v0.8.23和http-proxy 0.10.1。(至少在#1发生之前)
(你可以通过运行npm install http-proxy@0.10.1
来安装旧版本的npm模块)