如何使 PHP 脚本对数据库插入做出实时反应


How to make a PHP script react in real time to a database insertion?

我有多个 24/7 全天候运行的 PHP 脚本,每个脚本在不同的机器上,从互联网上获取有关用户的信息。

这些用户位于 (postgresql) 数据库的表中。每次新用户在应用程序中注册时,都会在表中插入一条新记录,该记录将其分配给当前运行的 PHP 脚本之一(均匀分配负载)。

有没有办法让分配给它的PHP脚本可以实时做出反应,以便立即开始获取有关用户的信息?

(我目前的设置是每个 PHP 脚本每 1 分钟查询一次表,并检查是否已为其分配新用户......但是更频繁的查询会增加数据库负载,并且在 1 分钟的窗口中,我不会从新添加的用户获取信息。

检查这个 PHP 代码示例,用于 postgres LISTENNOTIFY : http://php.net/manual/en/function.pg-get-notify.php

Postgres man on LISTEN/NOTIFY :http://www.postgresql.org/docs/current/static/sql-notify.htmlhttp://www.postgresql.org/docs/current/static/sql-listen.html

SQL 触发器触发来自sys_exec()启动的 HTTP 请求?但这似乎有点矫枉过正。

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 帖子