8

我正在尝试让 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);
});

但这似乎不起作用。快速检查我从 Chrome 获得的 websockets 是否工作显示Unexpected response code: 400(如果我直接去,工作正常)

server.on('upgrade',..在 websocket 请求上也不会触发一些检查

如何让我的代理服务器正确路由 websocket?

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

4

1 回答 1

2

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

您唯一需要做server.on('upgrade')的就是将中间件函数传递给httpProxy.createServer或者您已经手动创建了带有http.createServer().

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


然而, http-proxy 中的 WebSocket 支持目前在 node v0.10.x 上stream2而中断(node core 中的流 API在 0.10 中完全重写)。 此外,最新版本的 http-proxy (0.10.2) 在节点 v0.8 中被破坏,因为对流 2 问题的错误修复

所以你有两个选择:

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

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

于 2013-05-15T20:46:21.730 回答