这是我的问题:我有一个应用程序,允许用户将他们的数据与社交网络同步。问题是每次同步最多可能需要10秒钟。所以我想在“后台”任务中触发同步,如果可能的话,并行化所有同步。
目前,我的脚本如下:
$user = user::login($username, $password);
/* Do some treatments, display the home page */
$user->synchronize();
/* END OF LOGIN SCRIPT */
在我的user.class.php中,我有类似
的内容public function synchronize(){
$Networks = socialNetworks::getByUserId($this->userid);
foreach($Networks as $n) $n->synchronize();
}
最后在socialNetworks.class.php中,我已经为每个社交网络(fb,linkedin,google +,...)实现了所有同步脚本。
请注意,登录时无需等待同步结果。
所以我在这里有两个问题:
您建议您对此进行优化?
感谢。
答案 0 :(得分:0)
有两种方式。
exec()
制作多个系统调用,例如exec("php /path/to/script?networkId=1 > /dev/null 2>/dev/null &")
pcntl_fork()
function。 答案 1 :(得分:0)
一种选择是使用Gearman,并将此工作卸载给工作人员。
您基本上创建了一个可以完成某项工作的PHP脚本。然后你告诉它从你的登录脚本做这项工作,工作将在请求之外的后台完成。
答案 2 :(得分:0)
她是一篇关于使用php进行异步处理的博文:
http://robert.accettura.com/blog/2006/09/14/asynchronous-processing-with-php/
<?php
include 'AsynchronousProcessing.php'
launchBackgroundProcess('php /path/to/task1.php');
launchBackgroundProcess('php /path/to/task2.php');
$class->SomeWork();
$class->SomeOtherWork();
?>