Как отправить 102 Processing в экспресс?

Я настраиваю новый HTTP-сервер для выполнения длинной команды и возврата ответа от этой команды оболочки клиенту.

Я запускаю v4.17.1 Express. При выполнении этой команды время ожидания запросов от клиентов неоднократно истекало. (Я app.use(cors()) если это имеет значение).

    app.get("/dl", (req, res) => {
        require("child_process").exec("command -url".concat(req.query.url), (err, stdout, stderr) => {
            if (err || stderr) res.status(500).send(`err: ${err.message}, stderr: ${stderr}`);
            res.status(200).send(stdout);
        }
    });

Браузеры просто отключаются, когда я пытаюсь запустить эту команду, потому что это занимает ДОЛГОЕ ВРЕМЯ. Если я не могу использовать 102 Processing, это нормально, просто мне нужно другое решение. Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
597
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы посоветовал не использовать HTTP 102. Вы можете узнать больше о том, почему: https://softwareengineering.stackexchange.com/a/316211/79958

Я бы также рекомендовал СИЛЬНО против вашей текущей логики, используя параметр запроса. Кто-то может вводить команды, которые будут выполняться на сервере.

Ответ принят как подходящий

"Если я не смогу использовать 102 Processing..."

Не используйте 102 Processing, так как он разработан специально для WebDAV. Пожалуйста, ознакомьтесь с RFC2518 для получения подробной информации.

«Хотелось бы другое решение»

Вы можете вернуть 200 OK вместо GET /dl после получения HTTP-запроса и запуска дочернего процесса, указав: «Эй, клиент, я получил ваш запрос и успешно начал работу»:

app.get("/dl", (req, res) => {
    require("child_process").exec("command -url".concat(req.query.url));
    res.status(200).end();
});

Затем в дочернем процессе сохраните результат выполнения где-нибудь (в файле, в БД и т. д.) и сопоставьте результат с URL-адресом запроса:

query url A --> child process result A
query url B --> child process result B
query url C --> child process failed information

На стороне клиента, после получения 200 OK для GET /dl запроса, запустите опрос - отправка запроса на сервер каждые 5 секунд (или любой другой временной интервал, который вам нужен), с URL-адресом предыдущего успешного запроса в качестве параметра, пытаясь получить его результат в приведенном выше сопоставлении. . Это было бы:

  • Если результат найден в приведенном выше отображении, клиент получает то, что он хочет, и останавливает опрос.
  • Если в приведенном выше сопоставлении ничего не найдено, клиент продолжает опрос еще через 5 секунд.
  • Если обнаружена ошибочная информация или время опроса истекло, клиент сдается, останавливает опрос и отображает сообщение об ошибке.

Другие вопросы по теме