gpt4 book ai didi

javascript - 带有 proxytable 和 websockets 的 Node http 代理

转载 作者:数据小太阳 更新时间:2023-10-29 04:19:41 24 4
gpt4 key购买 nike

我正在尝试让 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?

我也在 Node 0.8.23 和 Node 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 应该通过您配置中的代理“正常工作”。


但是, http-proxy 中的 WebSocket 支持是 currently broken on node v0.10.x因为 streams2( Node 核心中的流 API were completely rewritten in 0.10)。 此外,由于botched fix,最新版本的http-proxy (0.10.2) 在 Node v0.8 中被破坏。对于 streams2 问题。

所以你有两个选择:

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

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

关于javascript - 带有 proxytable 和 websockets 的 Node http 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16503349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com