10秒非阻塞后执行php

时间:2013-08-21 08:45:01

标签: php facebook-php-sdk

构建Facebook应用程序并且由于Facebook规则,我必须等待10秒才能执行用户操作的发布。

这也可以用JavaScript完成,但已经发现php sdk更精确。

我的问题是,延迟执行代码10s的最佳和最准确的方法是什么

$response = $facebook->api(
'me/video.watches',
'POST',
array(
'tv_show' => "$permalink"
)
);

使用睡眠(10);将阻止整个页面加载。这里有什么正确的解决方案?

4 个答案:

答案 0 :(得分:1)

这可以通过创建数据库表并使用要作为post发送的记录来提供数据库来完成。 在服务器上创建一个读取未处理记录的cron,并为所需用户创建一个facebook帖子。

答案 1 :(得分:1)

您想要的是某种形式的异步处理。您可以采取多种不同的方法。

  • 将'jobs'写入文件,数据库中的表等,然后使用cronjob处理它们。
  • 分叉您的PHP流程,在“父”流程中为用户提供响应,并在“子”流程中发布到Facebook。
  • 启动新流程并将其分离。 (exec('php postToFacebook.php > /dev/null 2>/dev/null &');
  • 使用Gearman等作业服务器系统。

    我认为Gearman是最酷的,'新进程和分离'技巧可能是最简单的。

答案 2 :(得分:0)

  

使用睡眠(10);将阻止整个页面加载。这里有什么正确的解决方案?

在黑暗中拍摄,首先尝试渲染页面然后调用sleep()?如果没有关于如何处理响应的上下文以及用户需要看到什么样的东西,很难建议一个“简单”的解决方案。

答案 3 :(得分:0)

您可以通过客户端的AJAX调用触发Facebook操作。页面加载后,您可以使用简单的setTimeout()来延迟调用:

setTimeout( function(){
  // Execute your AJAX call
}, 10000 ); // 1000 miliseconds = 1 second

通过AJAX调用的页面可以像往常一样简单地执行对Facebook的请求。