我有多个PHP脚本全天候运行,每个脚本位于不同的计算机上,用于从Internet获取有关用户的信息。
这些用户位于(postgresql)数据库的表中。每次新用户在应用程序中注册时,都会在表中插入一条新记录,并将其分配给当前正在运行的PHP脚本之一(均匀分配负载)。
有没有办法让分配给它的PHP脚本能够实时做出反应,以便立即开始获取有关用户的信息?
(我目前的设置是每个PHP脚本每隔1分钟查询一次表,并检查是否已为其分配新用户...但更频繁的查询会增加数据库负载,在那1分钟窗口中,我是不从新添加的用户获取信息。)
答案 0 :(得分:1)
查看postgres LISTEN
和NOTIFY
的PHP代码示例:http://php.net/manual/en/function.pg-get-notify.php
LISTEN/NOTIFY
上的Postgres男子:
http://www.postgresql.org/docs/current/static/sql-notify.html
http://www.postgresql.org/docs/current/static/sql-listen.html
答案 1 :(得分:0)
从 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;
}
来源:
How to make an HTTP Post