繁体   English   中英

用PHP和MySQL进行异步事务

[英]Async transactions with PHP and mySQL

当站点(用PHP和MySQL内置)上发生某种操作时,我希望站点上不会发生异步事件。

例如,当用户回答问题,上传文档时,我希望在后台进行一些异步操作,例如:1.更新用户评分2.在Facebook墙上发布消息3.跟踪用户操作。

哪种PHP,JavaScript和MySQL技术最适合实现这一目标? 请帮忙。

我想要MySQL触发但想异步发生的东西。

我能想到的仅有的两个选项是消息传递队列和异步ajax。

第一个选项通过将作业放入数据库中来工作,然后计划的php程序将遍历数据库中的每个作业并运行它们。

第二个只是使用ajax调用php程序。

对于第一种选择,请参见以下内容: http : //alanstorm.com/simple_php_job_queue
第二次来看jquery及其ajax选项: http : //api.jquery.com/jQuery.ajax/

最好的选择是使用exec调用三个单独的PHP脚本,并将输出传递给null,如下所示。

exec("/usr/bin/php somescript.php >> some_log_file.log 2>&1 &");

对这三个功能在三个脚本上执行相同的exec,将同时/异步执行所有这三件事。 这就是你的追求。

如果将作业添加到作业队列中,然后通过cron清除该队列,则您实际上不是异步进行的。 尽管用户不等待这些事情发生,但您仍在以同步阻塞的方式一件一件地做事。 如果您的站点流量很大,清除队列的时间也可能会有延迟,而exec不会带来相同的延迟。 由于脚本将立即并同时执行到初始请求。

旁注:这就是为什么Node.js如此流行的原因,它基于针对这种开发方法设计的JavaScript构建。 异步和事件驱动。

使用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;
});

您可以使用消息队列服务器。

您也可以使用php系统调用在后台运行另一个程序: http : //php.net/manual/en/function.system.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM