У меня есть несколько PHP-скриптов, работающих круглосуточно, каждый на разных компьютерах, которые получают информацию о пользователях из Интернета.
Эти пользователи находятся в таблице в базе данных (postgresql). Каждый раз, когда новый пользователь регистрируется в приложении, в таблицу вставляется новая запись, которая назначает ее одному из работающих в данный момент PHP-скриптов (равномерно распределяя нагрузку).
Есть ли способ, чтобы скрипт PHP, которому он был назначен, мог реагировать в режиме реального времени, чтобы немедленно начать получать информацию о пользователе?
(У меня есть текущие настройки: каждый PHP-скрипт запрашивает таблицу каждые 1 мин и проверяет, назначены ли ей новые пользователи … но более частые запросы увеличивают нагрузку на базу данных, и в этом 1-минутном окне я не получаю информацию от недавно добавленного пользователя.)
Проверьте этот пример кода PHP для postgres LISTEN
а также NOTIFY
: http://php.net/manual/en/function.pg-get-notify.php
Postgres человек на LISTEN/NOTIFY
:
http://www.postgresql.org/docs/current/static/sql-notify.html
http://www.postgresql.org/docs/current/static/sql-listen.html
Запустить HTTP-запрос от sys_exec()
запустить с Триггер SQL ? Но это кажется излишним.
DELIMITER $$
CREATE TRIGGER `test_after_insert` AFTER INSERT ON `test`
FOR EACH ROW BEGIN
SET @exec_var = sys_exec('/usr/bin/php /myApp/after_insert.php')
END;
$$
DELIMITER ;
Я знаю, что это не скрипт Postgres, но он должен работать.
— РЕДАКТИРОВАТЬ —
И после в after_insert.php
:
function httpPost($url, $data)
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
источники:
Как сделать HTTP Пост