Использование drupal batch api с сервисами - PullRequest
2 голосов
/ 27 января 2010

У меня есть приложение drupal, которое должно публиковать часть своего содержимого - есть интерфейс flash wysiwyg, который взаимодействует с бэкэндом drupal через сервисный модуль. Пользователь может загружать изображения / видео, размещать и манипулировать ими во флэш-памяти, а когда они будут готовы, экспортировать статическую версию. В рамках этого процесса экспорта приложению необходимо выполнить некоторую обработку элементов мультимедиа - масштабирование и т. Д., Поэтому я использовал пакетный API, чтобы он обрабатывал только элемент одновременно, чтобы остановить тайм-ауты и так далее. В основном это работает нормально, но я отстаю от того, что батчапи, кажется, работает. То, что я пытаюсь сделать, это:

  1. Вспышка вызывает службу экспорта
  2. Служба экспорта создает узел, который представляет этот экспорт, и возвращает идентификатор_узла
  3. Служба экспорта запускает экспорт в фоновом режиме, после того как он изменяет состояние в узле
  4. Тем временем инструмент flash опрашивает приложение, чтобы увидеть, когда публикация завершена, и уведомляет пользователя.

То, что меня сейчас отвлекает, - это запускать пакетный процесс в фоновом режиме, не вызывая перенаправления, которое пакет выполняет при вызове batch_process(), чтобы я мог вернуть идентификатор узла, чтобы он мигнул и инициировал одновременно с партией.

Надеюсь, это имеет смысл - какие-либо предложения / идеи? Или я делаю это неправильно?

1 Ответ

2 голосов
/ 27 января 2010

Не уверен на 100% (давно не использовал пакетный API), но сейчас я вижу 3 варианта:

  1. Используйте ваш текущий рабочий процесс и установите пакет 'init_message' на что-то, содержащее идентификатор узла:
    • Звоните batch_process(), принимая переадресацию. Ваше флэш-приложение должно выполнить перенаправление, а затем проанализировать возвращенную страницу, чтобы извлечь идентификатор узла из отображаемого сообщения
    • звучит некрасиво, так как вам придется анализировать стандартную страницу инициализации пакета: /
  2. Забудьте опрос и дайте флеш-инструменту дождаться результата:
    • Как и в варианте 1, ваш инструмент Flash должен иметь возможность обрабатывать перенаправления, генерируемые пакетной обработкой - вы начинаете пакетную обработку, устанавливая $redirect_url на страницу, которая будет возвращать результат по мере флэш-приложение.
    • Ваше флэш-приложение следует перенаправлениям, всегда проверяя страницу результатов - попав туда, оно просто использует ее
    • не уверен, как это будет соответствовать сервисному модулю, хотя: /
  3. Разделите инициализацию в вашем рабочем процессе:
    1. Инструмент Flash вызывает сервис экспорта по URL-адресу начальной загрузки
    2. Служба экспорта создает узел и возвращает идентификатор узла (здесь не запущен пакет!)
    3. Инструмент Flash извлекает идентификатор узла и вызывает службу экспорта по URL-адресу процесса, передавая идентификатор узла
    4. Служба экспорта использует переданный идентификатор узла, чтобы инициировать фактическую пакетную обработку (создает пакет и вызывает batch_process ())
    5. ... продолжить в соответствии с исходным рабочим процессом (опрос и т. Д.)

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


Edit:

  • Вариант варианта 3 может состоять в том, чтобы исходная служба экспорта (та, которая создает узел) вызывала страницу инициализации пакета посредством самой drupal_http_request(), прежде чем возвращать идентификатор узла на флэш-приложение. Та же основная идея (разделить первоначальный запрос на один, создающий узел, и другой, запускающий пакет), но более автономный с точки зрения приложений Flash, так как он не должен запускать обработку двумя отдельными вызовами.
...