Я использую php SoapClient
для вызова веб-сервисов M3 (Movex), хранящихся на нашем внутреннем сервере. Мой проект Symfony 3.4, который выполняет вызовы, находится на другом внутреннем Linux-сервере.
Я заметил, что инициализация мыльного клиента очень медленная (2-3 минуты), когда она выполняется после долгого времени безиспользуя его (несколько часов). Например, это происходит утром, когда я тестирую свой проект в первый раз за день. Но у меня нет проблем с каждой инициализацией и вызовами, выполняемыми через несколько минут (отвечает через 500 мс).
Поскольку 1-й процесс инициализации занимает несколько минут, мой сервер nginx возвращает ошибку времени ожидания шлюза 504 через 1 минуту.
URL-адреса веб-сервисов находятся в HTTPS, и мы используем SSL-сертификаты. Мы также должны были пройти аутентификацию с помощью логина и пароля. Я использую сеансовый cookie-файл, доступный в течение 8 часов, который добавляю в заголовок HTTP-запроса. Мы не используем прокси.
Я думаю, что это проблема с кешем . Когда я использую SoapUI, у меня нет проблемы, веб-сервис реагирует очень быстро.
Вот конфигурация расширения мыла в моем php.ini:
Вот мой init-файл мыльного клиента:
$client = new SoapClient("https://my-domain.com:55080/my-webservice?wsdl", array(
'login' => $login,
'password' => $pwd,
'trace' => true,
'exceptions' => true,
'stream_context' => stream_context_create(array(
'http' => ['header' => 'cookie: ' . $cookie]
))
));
Я пытался добавить 'cache_wsdl' => WSDL_CACHE_MEMORY
в настройках, но это хуже, каждый раз, когда я его использую,это очень медленно.
Вот журналы, чтобы увидеть, где возникает проблема (посмотрите на строки 3 и 4 -> 2 минуты):
01/10/19 09:58:06 ------- Get Customer -------
01/10/19 09:58:06 - Cookie exists -> send it in the request
01/10/19 09:58:06 - BEGIN Init soap client
01/10/19 10:00:07 - END Init soap client
01/10/19 10:00:07 - BEGIN client->GetCustomerData
01/10/19 10:00:07 - END client->GetCustomerData
01/10/19 10:00:07 ------- END Get Customer -------
Когда я проверяю это снова через несколько минут(без проблем, сделано в ту же секунду):
01/10/19 10:03:52 ------- Get Customer -------
01/10/19 10:03:52 - Cookie exists -> send it in the request
01/10/19 10:03:52 - BEGIN Init soap client
01/10/19 10:03:52 - END Init soap client
01/10/19 10:03:52 - BEGIN client->GetCustomerData
01/10/19 10:03:52 - END client->GetCustomerData
01/10/19 10:03:52 ------- END Get Customer -------