Отправить сообщение GCM из PHP после загрузки страницы (без ajax)

Привет, ребята!

Моя история:
Я делаю PHP-приложение с Codeigniter. Когда моя страница загружена, я могу нажать кнопку, которая вызывает мой PHP API, который вносит некоторые изменения в базу данных и возвращает результат (true или false, если изменение в базе данных не было успешным). Также после изменения базы данных я вызываю скрипт PHP, который отправляет push-уведомления зарегистрированным устройствам Android, которые хранятся в моей базе данных.

Моя проблема:
When there are a lot of registered android devices it takes some time to load the page (PHP is waiting for every GCM request to come back). Is there a way that I can load the page after the database changes AND make GCM requests in the background/async?

РЕДАКТИРОВАНИЕ № 1:
I am on a Ubuntu server.

2 ответа

Решение

Существует несколько различных способов решения этой проблемы, но наиболее распространенным решением является использование некоторой формы очереди сообщений для разгрузки работы на отдельные процессы.

Вы можете просто сохранить сообщения в отдельной таблице в вашей базе данных и запускать каждые несколько минут сценарий cron для отправки этих сообщений (и удалять их из таблицы только при успешной отправке), или вы можете изучить использование rabbitmq, gearman или beanstalk, которые предназначены для того, чтобы быть более надежными и легко масштабируемыми.

Рекомендуемое чтение:

Если вы можете отделить push-код от отдельного скрипта, вы можете вызвать его с помощью

 exec("php /path/to/script.php > /dev/null &");

Это должно запустить его в фоновом режиме (в Linux) без сценария, который вызывает его ожидания.

Другим вариантом может быть сохранение уведомлений в базе данных в виде очереди и запуск сценария через cron каждые N минут для проверки очереди и отправки из нее уведомлений.

Другие вопросы по тегам