使用AWS PHP SDK v2在S3区域之间进行非阻塞对象复制

时间:2014-08-14 19:03:42

标签: php amazon-s3 guzzle aws-php-sdk

我正在尝试使用AWS PHP SDK v2中的S3Client->copyObject()操作在位于不同区域的存储桶之间复制Amazon S3中的大对象。

对象复制确实有效,但问题是复制操作可能需要相当长的时间才能返回响应并阻止PHP脚本的执行,这不是我在这种特殊情况下所需要的。

有没有办法通过SDK以非阻塞的方式进行copyObject()调用(可能有一些较低级别的Guzzle设置)?我需要这种非阻塞行为,因为我必须将常规运行状况检查发送到另一个服务(Amazon SWF),以让它知道我的脚本仍在运行。

如果呼叫无法以非阻塞的方式执行,我知道还有其他可能的解决方案,但我希望从有更多SDK经验的人那里获得更多想法。

(我认为我可以采取的一种可行方法是fork()进程并在子进程中执行copyObject()操作;此外,如果Guzzle支持,某种进程回调也会起作用它确保回调方法每分钟至少执行一次)

1 个答案:

答案 0 :(得分:0)

为此,您需要创建一个将在后台运行的进程。

您可以使用亚马逊队列服务。

点击此链接 - http://aws.amazon.com/sqs/

解决方案1 ​​ - 您只需要提供排队服务的工作,它将在后台执行您的任务,因此您的PHP脚本不需要等待。

解决方案2 - 还有另一种方法是让PHP cron作业在每分钟或5分钟后执行。您可以将任务存储在数据库中,您的cron将从DB访问任务并执行它。 工作原理您只需将任务转储到数据库并返回即可。然后你的cron将从DB中读取并在后台执行它。