我正在使用Facebook SDK在时间线上发布一些事情。问题是,API请求通常需要2-3秒,这会减慢我的网站速度,特别是因为我有很多ajax请求。
有没有办法把一部分PHP代码派生到后台?我希望所有的全局、会话等都保持不变。
发布于 2012-06-16 17:07:09
你可以使用PHP exec()来执行一个单独的PHP脚本。
$cmd = "php5 -q /path/to/php/send_fb_request.php";
exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));然后,如果您想要监视进程是否仍在运行:
function isRunning($pid){
try{
$result = shell_exec(sprintf("ps %d", $pid));
if( count(preg_split("/\n/", $result)) > 2){
return true;
}
}catch(Exception $e){}
return false;
}发布于 2012-06-16 17:03:12
如果可能的话,我会为它创建一个队列,并从队列中执行那些耗时的问题,而不是从http进程中为您的网站生成和处理web请求。
这样你就有了完全的控制权,甚至可以将它与其他服务器分开,这是解决这类问题的最常见的解决方案。
您最好使用真正的队列解决方案,但我也看到很多简单的MySQL解决方案在项目规模较小的情况下仍然有效。点击此处了解更多信息:http://www.engineyard.com/blog/2011/5-subtle-ways-youre-using-mysql-as-a-queue-and-why-itll-bite-you/
还检查了我们的一些队列,它还允许一些API可能发生的诸如速率限制、日志记录和测量之类的事情,好的是它将创建post和与外部方的实际处理分开,从而提供了一个中央控制点和代码分离。
发布于 2012-06-16 17:13:45
听起来你想要异步PHP。本文很好地解释了一种技术:http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html
https://stackoverflow.com/questions/11062022
复制相似问题