gpt4 book ai didi

firebase - 通过 Firebase 托管代理的 Https 函数的网关超时

转载 作者:行者123 更新时间:2023-12-02 04:29:27 26 4
gpt4 key购买 nike

问题:

我们使用的 Https 函数响应时间超过 60 秒(这是我们用例的必要要求,不能用异步执行代替)。我们配置了函数超时,以便它们在例如之后成功75 秒,如从 Chrome 或 Postman 直接执行通过例如https://us-central1-<project-id>.cloudfunctions.net/test .

我们还配置了托管代理来重写对 /api 的所有请求。到这些功能。但是,当通过这些“托管”端点(例如 https://<project-id>.firebaseapp.com/api/test)提交相同的请求时,我们在 Chrome 和 Postman 中仅在 60 秒后收到 504(网关超时)错误。这表明托管代理本身在函数 之前超时。成功 ( 其中 仍然发生,如 Firebase 控制台日志中所示)。

题:

是否可以将托管超时设置为更高的值(例如 120 秒)?

可能的解决方案/解决方法:

  • 试图设置 Connection: keep-aliveKeep-Alive: timeout=120客户端请求中的 header ,但这似乎对托管代理没有任何影响;或者我们做得不对。
  • 目前唯一的解决方法是不使用重写规则,而是依靠“直接”URL(来自 cloudfunctions.net)。然而,这需要在浏览器客户端中处理 CORS,更重要的是,改变我们的 URL 解析方案和函数代码的组织(例如,我们不能为每个函数使用长路径,例如 /api/some/path/to/test,因为只有第一部分路径,例如 api ,将被视为函数名称)。

  • 谢谢!

    最佳答案

    可以以维护持久连接的方式编写函数:

    https://firebase.google.com/docs/functions/networking#https_requests

    const http = require('http');
    const functions = require('firebase-functions');
    const agent = new http.Agent({keepAlive: true});

    exports.function = functions.https.onRequest((request, response) => {
    req = http.request({
    host: '',
    port: 80,
    path: '',
    method: 'GET',
    agent: agent,
    }, res => {
    let rawData = '';
    res.setEncoding('utf8');
    res.on('data', chunk => { rawData += chunk; });
    res.on('end', () => {
    response.status(200).send(`Data: ${rawData}`);
    });
    });
    req.on('error', e => {
    response.status(500).send(`Error: ${e.message}`);
    });
    req.end();
    });

    关于firebase - 通过 Firebase 托管代理的 Https 函数的网关超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50519766/

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