Запустите nusoap с php, не ждите результатов - PullRequest
0 голосов
/ 06 августа 2009

У меня есть сценарий, на котором в данный момент есть шаг, на котором я запускаю голосовую трансляцию после того, как клиент зарегистрируется Это вызов nusoap для callfire.

Задержка довольно высока, и она добавляется примерно к 2 секундам в мой процесс регистрации в секунду. В результате у меня есть люди, нажимающие кнопку регистрации более одного раза.

Есть ли способ сказать приложению, что НЕ нужно ждать результатов и просто двигаться дальше?

Можно обмануть, поместив весь код nusoap в отдельный файл, затем откройте сокет для этого файла, но я ищу более чистый способ.

Или есть способ запустить функцию и не ждать результатов? Я не думаю, что есть.

Ответы [ 4 ]

1 голос
/ 06 августа 2009

Вы можете переместить код в сценарий cli. Запустите скрипт cli из потока PHP веб-сервера. Процесс CLI тогда разветвляется, и родитель выходит. Веб-поток может продолжаться, и дочерний процесс CLI может зарегистрировать пользователя.

В случае сбоя при вызове SOAP, я предлагаю вам сохранить данные где-нибудь и удалить их или пометить их как завершенные после успешного завершения. Вы можете регулярно выполнять задание cron, чтобы проверить, не произошли ли какие-либо вызовы, и повторить их, а затем уведомить кого-либо (администратора, пользователя).

0 голосов
/ 06 августа 2009

Насколько я знаю, нет способа напрямую запустить функцию и пройти мимо нее в цепочке выполнения ... но есть несколько классных / простых решений:

  • Как вы упомянули, поместив код в отдельный файл и запустив его таким образом ... хотя я бы просто использовал команду shell_exec, чтобы запустить его, и nohup, чтобы он работал в фоновом режиме
  • Создайте очередь, как упомянул Пол
  • Посмотрите на что-то вроде gearman (http://www.danga.com/gearman/)... Digg написал несколько хороших библиотек PEAR для работы с ним. Gearman, вероятно, немного излишним, но это слишком круто, чтобы не упоминать:)
0 голосов
/ 06 августа 2009

Вы можете подумать о выполнении запроса Ajax из браузера:

  • пользователь входит в систему
  • он перенаправлен на страницу (например, на страницу своего аккаунта)
  • на этой странице есть Ajax-вызов PHP-скрипта на вашем сервере, который выполняет SOAP-вызов

Это идея, которую вы часто будете слышать, я думаю ... Но она требует, чтобы пользователь включил Javascript, и не всегда может работать хорошо (что если пользователь покидает страницу до завершения запроса Ajax?)

ИМХО, лучший (более безопасный, всегда будет работать, не зависит от клиента, ...) путь действительно будет с какой-то очередью запросов, как Пол предложил .
Это решение я бы выбрал.

Но, конечно, это добавляет некоторую задержку между входом пользователя в систему и временем отправки запроса ... но так ли это плохо?

0 голосов
/ 06 августа 2009

Если у вас есть какое-то действие, которое должно быть скорее «скорее», чем «сразу», добавьте его в какую-либо очередь (например, таблицу базы данных).

Далее, пусть каждую минуту появляется задание cron и выполняется задача, находящаяся в этой очереди.

...