zkrvndm
@zkrvndm
Архитектор решений

Возможно ли при POST-запросе тело запроса отправить с опозданием?

При выполнении POST-запроса можно ли тело запроса отправлять не сразу, а спустя какое-то время? Иными словами, меня интересует Long Polling наоборот: открываем соединение, но не отсылаем данные на север, а ждем какое-то время, пока данные не будут готовы, уже по факту готовности данных досылаем их в виде тела запроса в ранее открытое соединение.

Возможно ли это реализовать на JavaScript в браузере? Если нет, возможно это получится сделать как-то через PHP?

Меня устроило бы любое решение, хоть на JavaScript, хоть на PHP - просто подскажите куда копать и что гуглить. Спасибо.

Пояснение: зачем мне это нужно
Дело в том, что целевой сервер считает датой регистрации заявки момент установки соединения, а не момент, когда ты отправил последние байты POST-запроса. Думаю, очевидно, что мне это нужно ради получения преимущества во времени.
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
zkrvndm
@zkrvndm Автор вопроса
Архитектор решений
Ура, возрадуйтесь разработчики всех мастей!

Сегодня вышел Chrome 105 и в него наконец-то в хром завезли данную очень нужную функцию.
Теперь можно отсылать запрос частями с той скоростью с которой тебе это надо =)

function wait(milliseconds) {
  return new Promise(resolve => setTimeout(resolve, milliseconds));
}

const stream = new ReadableStream({
  async start(controller) {
    await wait(1000);
    controller.enqueue('This ');
    await wait(1000);
    controller.enqueue('is ');
    await wait(1000);
    controller.enqueue('a ');
    await wait(1000);
    controller.enqueue('slow ');
    await wait(1000);
    controller.enqueue('request.');
    controller.close();
  },
}).pipeThrough(new TextEncoderStream());

fetch(url, {
  method: 'POST',
  headers: {'Content-Type': 'text/plain'},
  body: stream,
  duplex: 'half',
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы