Поддерживает ли жизнь только исходящие запросы - PullRequest
0 голосов
/ 13 июня 2019

Если у меня есть клиент, который может отправлять запрос в облачную функцию http Google несколько раз за относительно короткий промежуток времени, как я могу использовать keep-alive? Достаточно ли, чтобы клиент отправил заголовок keep-alive соединения?

Я видел это в Google Docs: 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

Что мне нужно сделать, чтобы повторно использовать соединения по запросам, отправленным конечным пользователем?

1 Ответ

0 голосов
/ 13 июня 2019

Когда вы определяете agent в глобальной области действия вашей функции, она сохраняется только до тех пор, пока не будет запущен какой-либо конкретный экземпляр сервера, на котором он выполняется. Таким образом, хотя ваши соединения могут сохраняться в этом одном экземпляре, они не будут делиться никакими соединениями с другими экземплярами, которые выделяются при увеличении нагрузки на вашу функцию. У вас нет особого прямого контроля над тем, когда Cloud Functions запускает новый экземпляр для обработки новой загрузки или когда он освобождает этот экземпляр. Вы просто должны признать, что они будут приходить и уходить с течением времени вместе с любыми HTTP-соединениями, которые поддерживаются объектами глобальной области видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...