В моем сервисе nusoap зарегистрировано следующее действие:
$server->register(
'testfunction',
array('value' => 'xsd:string'),
array( ),
'urn:test_services',
'urn:test_services#testfunction'
);
…и сама функция:
function testfunction($value)
{
// do something with $value
}
Я хочу, чтобы действие было «выстрелить и забыть», то есть, какие бы вызовы оно ни вызывало, не нужно торчать для ответа. Я только что передал пустой массив для аргумента ответа $ server-> register. Я думал, что это может достичь того, что я искал, но это не так (клиент зависает для ответа).
WSDL выглядит так:
<message name="testfunctionRequest">
<part name="value" type="xsd:string"/>
</message>
<message name="testfunctionResponse"/>
Есть ли способ добиться такой функциональности с помощью nusoap? Я не уверен, является ли «огонь и забыл» правильной терминологией, поэтому у меня возникли некоторые проблемы с поиском возможных ответов на этот вопрос!
Вам необходимо отсоединить текущее выполнение от процесса веб-сервера и закрыть соединение: используя pcntl_fork () или запуск сценария PHP в фоновом режиме — Асинхронная оболочка в PHP
Другой вариант — добавить информацию о запросе в некоторую очередь. Эта очередь может быть таблицей MySQL (или другой СУБД) или чем-то вроде хранилища MemcacheQ, RabbitMQ и т. д. Затем извлекайте информацию из очереди другим независимым сценарием и обрабатывайте ее.
Других решений пока нет …