带有proxytable和websockets的节点http代理



我试图让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问题。

你有两个选择:

  1. 等待http-proxy重写其内部来处理流。
  2. 降级到节点v0.8.23和http-proxy 0.10.1。(至少在#1发生之前)

(你可以通过运行npm install http-proxy@0.10.1来安装旧版本的npm模块)

相关内容

  • 没有找到相关文章

最新更新