使用proxytable和websockets来configurationhttp代理

我试图让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是否工作显示我得到Unexpected response code: 400从Chrome浏览器(工作正常,如果我直接去)

还做了一些检查server.on('upgrade',..不会触发一个websocket请求

我怎样才能让我的代理服务器正确路由websockets?

我也试过在节点0.8.23以及节点0.10.x(节点的更高版本有一个内存泄漏问题,但它不会在0.8.23工作)

当您使用httpProxy.createServer() ,不需要处理upgrade事件,因为http-proxy会自动处理upgrade事件。 因此,你的server.on('upgrade', ...)永远不会触发,因为http-proxy已经在内部处理它了。

唯一需要执行server.on('upgrade')的时候是将中间件函数传递给httpProxy.createServer或者使用http.createServer()手动创build了服务器。

换句话说,websockets应该通过configuration中的代理“正常工作”。


但是, http-proxy中的WebSocket支持由于stream2(节点核心中的streamAPI 完全重写为0.10 )而在节点v0.10.x中当前被破坏此外 ,http-proxy(0.10.2)的最新版本在节点v0.8中被破坏,原因是对于streams2问题修复了一些错误。

所以你有两个select:

  1. 等待http-proxy重写它的内部以处理streams2。
  2. 降级到节点v0.8.23和http-proxy 0.10.1。 (至less在1号发生之前)

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