使用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:
- 等待http-proxy重写它的内部以处理streams2。
- 降级到节点v0.8.23和http-proxy 0.10.1。 (至less在1号发生之前)
(您可以运行npm install http-proxy@0.10.1
来安装旧版本的npm模块。)