异步requestAction

时间:2015-02-05 11:46:10

标签: cakephp asynchronous

Pleeeeease 帮助我 ......: - )

“你是我唯一的希望”。

我需要异步执行几千次动作。该操作应该从外部API获取电子邮件内容,并且它位于不同的控制器中,因此我使用 requestAction 来获取它。当我得到所有结果时,使用其他API在一次请求期间将这1000封电子邮件内容作为1000封电子邮件发送。

不幸的是,当按顺序运行时,需要花费很多时间,所以我需要异步运行这些请求。

我的问题是: 我可以执行

$this->requestAction($myUrl)

...平行?例如,一次100个请求?我在PHP中看到了一些异步示例,但它们都使用了静态文件,我需要保留CakePHP结构才能使用 requestAction

感谢所有可以提供帮助的人!

编辑:顺便说一下,当我尝试通过 fopen($ url,'r'); 然后 stream获取内容来运行请求时em>效率比最差,但也许可以改善。不知道,但 requestAction 似乎绝对是更好的选择(我认为)。

2 个答案:

答案 0 :(得分:2)

你有什么理由不使用shell吗? 请查看:CakePHP Shells

"延期执行"可能就是你在这里之后,基本上你想发送一个没有用户等待它的命令?如果是这样,那么您可以使用Message Queue轻松处理这个问题。

我们使用CakeResque和Redis发送1000封电子邮件并执行其他API调用

CakeResque - Deferred Processing for CakePHP

还有其他可用的消息队列,但这很容易实现,并且可能不需要对代码进行太多更改。

答案 1 :(得分:0)

最后,我无法找到使用 requestAction 的解决方案,但我能够将代码解压缩到一个独立的php文件,然后使用< em> include 方法。

最有趣的部分,异步请求,是使用名为 cURL-easy 的优秀库并借助我的实用程序功能完成的。您可以在这里阅读它(如何安装以及如何使用它):

Is making asynchronous HTTP requests possible with PHP?