Привет, я не большой эксперт на стороне сервера. Я написал длинную функцию веб-сервиса, которая выполняет ряд запросов и процессов и обычно иногда отправляет push-уведомления в конце функции пользователям 1-20 iPhone.
Теперь, когда вы отправляете широкомасштабные push-уведомления пользователям iPhone, вам нужно поставить задержку в 1 секунду между каждым нажатием. Это упростит простой запрос api так долго, как 30 секунд.
Я хочу избежать этого, есть ли способ, когда я вызываю web api, он запускает весь код и запускает новый поток или страницу внутри сервера и отправляет push-уведомления без остановки оригинального api и отправляет данные обратно в мобильное приложение, тем временем выполняя функцию отдельно на сервере для отправки push-уведомлений.
Мы не хотим использовать какие-либо задания cron, также веб-api вычисляет список пользователей, поэтому функция push может быть вызвана только внутри.
$this->sendPushNotification($friendsList, $userId);
$response = array(
'error'=>false,
'invalidKey'=>false,
'message'=>"Your query has completed"
);
$this->jsonOutput($response);
Теперь я хочу отправить jsonOutput в ближайшее время, когда запрос будет завершен, не дожидаясь, когда sendPushNotification будет принудительно. Проще говоря, я хочу запустить функцию асинхронно в php.
Я считаю, что вы хотите создать или развить процесс PHP для каждого элемента в очереди.
Посмотрите на эти два вопроса. Читайте о pthreads. Там также отличный пост здесь на многозадачности и асинхронной обработки:
<?php
function work() {
/* Do some work */
return 'result';
}
$dispatcher = new Amp\Thread\Dispatcher;
// call 2 functions to be executed asynchronously
$promise1 = $dispatcher->call('work');
$promise2 = $dispatcher->call('work');
$comboPromise = Amp\all([$promise1, $promise2]);
list($result1, $result2) = $comboPromise->wait();
РЕДАКТИРОВАТЬ
Если ваш push-скрипт - push.php, а другой скрипт - api.php:
<?php
function processAll() {
exec('nohup /usr/bin/api.php > /dev/null 2>&1 &');
exec('nohup /usr/bin/push.php > /dev/null 2>&1 &');
}
EDIT 2
Вам нужно будет удобно писать сценарии командной строки. Убедитесь, что вы можете запускать их самостоятельно в командной строке, прежде чем пытаться вставить их в exec()
- вам может потребоваться префикс команды с помощью php, то есть nohup/usr/bin/PHP скрипт.php
(опять же, вы можете запустить это в командной строки для проверки).