我正在尝试使用AWS PHP SDK v2中的S3Client->copyObject()
操作在位于不同区域的存储桶之间复制Amazon S3中的大对象。
对象复制确实有效,但问题是复制操作可能需要相当长的时间才能返回响应并阻止PHP脚本的执行,这不是我在这种特殊情况下所需要的。
有没有办法通过SDK以非阻塞的方式进行copyObject()
调用(可能有一些较低级别的Guzzle设置)?我需要这种非阻塞行为,因为我必须将常规运行状况检查发送到另一个服务(Amazon SWF),以让它知道我的脚本仍在运行。
如果呼叫无法以非阻塞的方式执行,我知道还有其他可能的解决方案,但我希望从有更多SDK经验的人那里获得更多想法。
(我认为我可以采取的一种可行方法是fork()
进程并在子进程中执行copyObject()
操作;此外,如果Guzzle支持,某种进程回调也会起作用它确保回调方法每分钟至少执行一次)
答案 0 :(得分:0)
为此,您需要创建一个将在后台运行的进程。
您可以使用亚马逊队列服务。
点击此链接 - http://aws.amazon.com/sqs/
解决方案1 - 您只需要提供排队服务的工作,它将在后台执行您的任务,因此您的PHP脚本不需要等待。
解决方案2 - 还有另一种方法是让PHP cron作业在每分钟或5分钟后执行。您可以将任务存储在数据库中,您的cron将从DB访问任务并执行它。 工作原理您只需将任务转储到数据库并返回即可。然后你的cron将从DB中读取并在后台执行它。