Pleeeeease 帮助我 ......: - )
“你是我唯一的希望”。
我需要异步执行几千次动作。该操作应该从外部API获取电子邮件内容,并且它位于不同的控制器中,因此我使用 requestAction 来获取它。当我得到所有结果时,使用其他API在一次请求期间将这1000封电子邮件内容作为1000封电子邮件发送。
不幸的是,当按顺序运行时,需要花费很多时间,所以我需要异步运行这些请求。
我的问题是: 我可以执行
$this->requestAction($myUrl)
...平行?例如,一次100个请求?我在PHP中看到了一些异步示例,但它们都使用了静态文件,我需要保留CakePHP结构才能使用 requestAction 。
感谢所有可以提供帮助的人!
编辑:顺便说一下,当我尝试通过 fopen($ url,'r'); 然后 stream获取内容来运行请求时em>效率比最差,但也许可以改善。不知道,但 requestAction 似乎绝对是更好的选择(我认为)。
答案 0 :(得分:2)
你有什么理由不使用shell吗? 请查看:CakePHP Shells
"延期执行"可能就是你在这里之后,基本上你想发送一个没有用户等待它的命令?如果是这样,那么您可以使用Message Queue轻松处理这个问题。
我们使用CakeResque和Redis发送1000封电子邮件并执行其他API调用
CakeResque - Deferred Processing for CakePHP
还有其他可用的消息队列,但这很容易实现,并且可能不需要对代码进行太多更改。
答案 1 :(得分:0)
最后,我无法找到使用 requestAction 的解决方案,但我能够将代码解压缩到一个独立的php文件,然后使用< em> include 方法。
最有趣的部分,异步请求,是使用名为 cURL-easy 的优秀库并借助我的实用程序功能完成的。您可以在这里阅读它(如何安装以及如何使用它):