У меня есть веб-сервис PHP SOAP, использующий CakePHP, который возвращает переменное количество данных обратно клиентам. Количество возвращаемых данных может быть очень маленьким или огромным (> 10 МБ, но <100 МБ). </p>
Проблема, с которой я столкнулся, заключается в том, что при больших откликах (обычно больше 5 МБ) приложению не хватает памяти и происходит сбой. Первое, что я попробовал изменить, - это использовать необработанные SQL-запросы, а не уровень доступа к данным Cake. Таким образом, когда я получу 10000 записей из базы данных, Cake не будет пытаться сохранить все это в памяти.
Это сработало очень хорошо, хотя это плохое соглашение. Однако большая проблема заключается в том, что, как только я получу результаты, все равно не хватит памяти для передачи ответа. Я не уверен, происходит ли это, когда SoapServer компилирует ответ, или если клиенту не хватает памяти для хранения ответа, или если ему не хватает памяти, просто сериализуя / отображая данные на экране.
В любом случае, похоже, что если бы был какой-то способ отправить ответ SOAP обратно клиенту, все работало бы намного лучше. Независимо от того, в чем проблема, данные могут быть разбиты на управляемые куски. Я не знаю, как сделать это в PHP, хотя, или если это вообще возможно.
Пожалуйста, сообщите.