2010-12-16 3 views
0

У меня есть PHP-код, который вызывает SOAP-запрос на удаленный сервер. Удаленный сервер обрабатывает запрос SOAP, и затем я могу получить результаты.Подождите, пока страница PHP завершит обработку запроса SOAP в фоновом режиме, а затем выполнит следующий оператор?

В идеале я хотел бы вызвать запрос SAOP, подождать 5 секунд, а затем перейти к поиску результатов. Причина заключается в том, что удаленный сервер занимает пару секунд, чтобы завершить обработку. Я не контролирую удаленный сервер.

В настоящее время у меня есть этот код:

$object = new Resource_Object(); 
$identifier = $_GET['id']; 
$object->sendBatch($id)); 
sleep(5); 
$results = $object->getBatchReport(); 
echo $results; 

Проблема с выше кодом sendBatch занимает несколько секунд. После добавления сон (5) для загрузки страницы требуется 5 секунд дольше, но результаты пока не отображаются. Если я снова загружу страницу или позвоню getBatchReport() с другой страницы, результаты покажут.

Я предполагаю, что это имеет какое-то отношение к безгражданству HTML, которое заставляет всю страницу выполнять сразу. Я рассматривал использование «буферизации вывода», но я не совсем понимаю, для чего нужна буферизация вывода.

Я также рассматривает возможность использования JQuery и Ajax, чтобы непрерывно опрашивать getBatchReport(), но проблема в том, что мне нужно, чтобы вызвать эту страницу из другого места, и как sendBatch() растет 5 вторая задержка может идти, вероятно, до 2 минут. Я не думаю, что Ajax будет работать, если я позвоню этой странице удаленно (эта страница уже вызывается в фоновом режиме, порожденном /dev/null 2> ).

У меня нет контроля над удаленным сервером, указанным в процедуре sendBatch, и насколько я знаю, он не имеет функций обратного вызова. Я бы предпочел не использовать CRON, потому что это означало бы, что я должен все время запрашивать удаленный сервер.

Любые идеи?

ответ

0

Я был слишком оптимистичен, когда думал, что 5 секунд сделают эту работу. После повторного тестирования я обнаружил, что на самом деле 15 секунд - более реалистичная ценность. Теперь работает.

Смежные вопросы