[英]Node http proxy with proxytable and websockets
我正在尝试使websocket也可以与node-http-proxy
。 区别在于我使用的是proxytable:
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请求上触发
我怎样才能使我的代理服务器正确地路由websocket?
我也在节点0.8.23和节点0.10.x上进行了尝试(节点的更高版本存在内存泄漏问题,但也无法在0.8.23上运行)
使用httpProxy.createServer()
,无需处理upgrade
事件,因为http-proxy会自动处理它。 因此,您的server.on('upgrade', ...)
永远不会触发,因为http-proxy已经在内部对其进行处理。
唯一需要做的server.on('upgrade')
是将中间件函数传递给httpProxy.createServer
或者使用http.createServer()
手动创建服务器时。
换句话说,websockets应该通过您配置中的代理“正常工作”。
但是,由于stream2(节点核心中的流API 已完全用0.10重写 ),http-proxy中的WebSocket支持当前在节点v0.10.x上已断开 。 另外 ,由于对streams2问题的错误修复 ,最新版本的http-proxy(0.10.2)在节点v0.8中被破坏。
因此,您有两种选择:
(您可以通过运行npm install http-proxy@0.10.1
来安装旧版本的npm模块。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.