Nano Hash - криптовалюты, майнинг, программирование

Как реализовать прогресс ajax в TIdHTTPServer?

У меня есть сервисный проект, который предоставляет HTTP-сервер через TIdHTTPServer и веб-интерфейс. Для выполнения ряда функций, которые может инициировать пользователь, может потребоваться 5-10 секунд, в течение которых они видят только анимацию gif, в то время как запрос ajax ожидает завершения моего кода delphi и возврата статуса.

Я хотел бы реализовать индикатор выполнения или процент (возможно, оставшееся время и т. д.), но я не уверен, как это должно быть реализовано. XMLHTTPRequest() имеет событие прогресса, которое кажется достаточно простым для реализации на клиенте, но как мне заставить сервер отвечать на его прогресс?

17.08.2015

  • Связано: stackoverflow.com/questions/76976/ 17.08.2015
  • Я предполагаю, что вы уже можете хранить ход выполнения функции для каждого соединения в любой переменной на стороне сервера. Ваш клиент просто отправляет запрос XMLHTTP (который легко написать). Итак, все, что вам нужно сделать, это обработать событие TIdHTTPServer OnCommandGet, прочитать заголовки запроса, найти один из них с именем X-Requested-With со значением XMLHttpRequest и вернуть ход выполнения вместо вызова вашей функции. 17.08.2015

Ответы:


1

С сайта Ajaxpatterns.org:

Еще один способ справиться с длинными вызовами XMLHttpRequest — явно ввести второй канал мониторинга. Пока выполняется первичный запрос, выдается последовательность запросов мониторинга, чтобы запросить у сервера оценку хода выполнения. Например, сервер может перебирать 1000 записей, выполнять преобразование для каждой из них и сохранять их в базе данных. Переменная цикла может быть открыта, чтобы служба мониторинга могла преобразовать ее в оставшееся процентное значение.

17.08.2015
  • Это было бы легко, если бы существовал только один поток, но вполне возможно, что идентичные запросы могут быть сделаны даже от одного и того же клиента. Я предполагаю, что клиент должен генерировать уникальный идентификатор для каждого запроса и передавать его вместе с начальным запросом ajax, а затем снова для каждого запроса выполнения. 17.08.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..