Длинный процесс PHP SOAP - PullRequest
       19

Длинный процесс PHP SOAP

2 голосов
/ 20 сентября 2010

Я работал над сайтом, который получает все свои данные через SOAP. Некоторые страницы могут иметь три или четыре звонка на мыльный сервер, а некоторые звонки могут иногда занимать довольно много времени (30-60 секунд).

Что я заметил, так это то, что я прерываю запрос во время одного из долгих 30-секундных вызовов (прекращаю загрузку браузера) и отправляю другой запрос на вызов, который не занимает много времени (загружает другой URL с более короткими вызовами ) Я не получаю запрос, пока не истекут 30 секунд первоначального звонка (или так кажется).

Что именно здесь происходит и есть ли способ обойти это?
Это что-то, что pcntl может помочь смягчить?
Также я хочу настроить PHP с FPM через Nginx. Повлияет ли это на вещи?

Благодарю всех!

Ответы [ 2 ]

0 голосов
/ 20 сентября 2010

(мне кажется) у меня была похожая проблема.Я использовал SOAP для получения запросов на стороне PHP от Java-сервера (это отправляло запросы).

Вопрос для вас: нужно ли отправлять ответ ACK (подтверждение) обратно?Если да, я думаю, что ваши запросы истекают.

Вот что случилось со мной:

На стороне Java он ожидал ответа ACK менее чем через 30 секунд, иначе произойдет ошибка, и он отправит запрос повторно.

На стороне PHP, даже несмотря на то, что я отправил ответ ACK, как только получил запрос SOAP, PHP не отправит его до конца выполнения скрипта.Это связано с тем, что PHP является однопоточным языком.

Чтобы обойти это, я принял запрос SOAP, проанализировал его в БД и отправил ответ ACK.Затем запустите другой скрипт (демон) для обработки запроса SOAP.Это хак, чтобы обойти мою проблему.

Надеюсь, что это может пролить свет на вашу проблему.

Кстати, это было для Salesforce (сторона Java) и их PHP Toolкомплект (API)

0 голосов
/ 20 сентября 2010

Я подозреваю, что если вы вдыхаете трафик на обоих концах (например, с помощью wireshark), тогда ответ может быть намного яснее.

Я полагаю, что либо клиент, либо сервер пытаются выполнить поиск DNS, который очень медленный. Обычно очень медленные поиски DNS происходят для несуществующих записей - и так как запрос приземляется на сервере, это означает, что неудачный поиск DNS выполняется сервером на IP-адресе клиента.

...