当某个动作发生在网站上(用PHP和MySQL构建)时,我希望在网站上发生一些异步的事情。
例如,当用户回答一个问题,上传文档时,我希望后台发生一些异步的事情,比如:1.更新用户的分数2.在Facebook墙上发布一条消息3.跟踪用户的操作。
哪种PHP,JavaScript和MySQL技术是实现这一目标的最佳选择?请帮帮忙。
我想要一些MySQL触发的东西,但又想异步发生。
发布于 2011-04-09 06:06:10
我能想到的唯一两个选项是消息队列和异步ajax。
第一种方法是将作业放入数据库中,然后一个预定的php程序将遍历数据库中的每个作业并运行它们。
第二个就是使用ajax调用php程序。
对于第一个选项,请看下面这样的内容:http://alanstorm.com/simple_php_job_queue
第二部分介绍jquery及其ajax选项:http://api.jquery.com/jQuery.ajax/
发布于 2011-04-09 06:20:35
最佳选择是使用exec调用三个单独的PHP脚本,并将输出传递给null,如下所示。
exec("/usr/bin/php somescript.php >> some_log_file.log 2>&1 &");
对三个函数的三个脚本执行相同的exec将会同时/异步地执行这三件事。这就是你想要的。
如果您将作业添加到作业队列中,然后让cron清除该队列,那么您实际上并不是在异步执行该操作。你仍然在以同步阻塞的方式一个接一个地做事情--尽管用户不会等待这些事情发生。如果您的站点具有高流量,则清除队列中也可能存在延迟,使用exec时,您不会得到相同的延迟。因为脚本将立即并同时执行于初始请求。
旁注:这就是为什么Node.js变得如此流行,它是建立在JavaScript之上的,它就是为这种开发方法而设计的。异步和事件驱动。
发布于 2014-04-18 13:49:14
使用swoole扩展。https://github.com/matyhtf/swoole
asyc mysql示例:
$db = new mysqli;
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query("show tables", MYSQLI_ASYNC);
swoole_event_add(swoole_get_mysqli_sock($db), function($__db_sock) {
global $db;
$res = $db->reap_async_query();
var_dump($res->fetch_all(MYSQLI_ASSOC));
exit;
});https://stackoverflow.com/questions/5601230
复制相似问题