是否仅对出站请求保持活动状态很重要



如果我有一个客户端可能在相对较短的时间内多次向http Google Cloud Function发出请求,我如何使用keep-alive?让客户端发送连接保持活动标头是否足够?

我在谷歌文档中看到了这个:https://cloud.google.com/functions/docs/bestpractices/networking

const http = require('http');
const agent = new http.Agent({keepAlive: true});
/**
 * HTTP Cloud Function that caches an HTTP agent to pool HTTP connections.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
exports.connectionPooling = (req, res) => {
  req = http.request(
    {
      host: '',
      port: 80,
      path: '',
      method: 'GET',
      agent: agent,
    },
    resInner => {
      let rawData = '';
      resInner.setEncoding('utf8');
      resInner.on('data', chunk => {
        rawData += chunk;
      });
      resInner.on('end', () => {
        res.status(200).send(`Data: ${rawData}`);
      });
    }
  );
  req.on('error', e => {
    res.status(500).send(`Error: ${e.message}`);
  });
  req.end();
};

但是,这仅适用于从云功能发出出站请求,对吗?

这里还有一些关于全局(实例范围(范围的内容:https://cloud.google.com/functions/docs/bestpractices/tips

在最终用户发送的请求上重用连接,我需要做些什么?

当您在函数的全局范围内定义agent时,它只会保留到运行该函数的任何给定服务器实例。 因此,虽然您的连接可能会在该实例中保持活动状态,但它不会与函数负载增加时分配的其他实例共享任何连接。 对于 Cloud Functions 何时启动新实例以处理新负载,或者何时解除分配该实例,您无法直接控制。 您只需要接受它们会随着时间的推移而来来去去,以及由全局作用域对象保持活动状态的任何 HTTP 连接。

相关内容

最新更新