10秒无阻塞后执行php


Execute php after 10s non blocking

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

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

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

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

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

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

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

  • 将"jobs"写入文件、数据库中的表等,并由cronjob处理它们。

  • 分叉你的PHP进程,在"父"进程中向用户提供响应,并在"子"进程中发布到Facebook。

  • 启动一个新进程并将其分离。(exec('php postToFacebook.php > /dev/null 2>/dev/null &');

  • 使用Gearman等作业服务器系统。

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

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

在黑暗中拍摄,尝试先渲染页面,然后调用sleep()?在没有上下文的情况下,很难就如何处理响应以及用户需要看到什么样的内容提供"简单"的解决方案。

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

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

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