如果我有一个客户端可能在相对较短的时间内多次向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 连接。