是否可能添加curl会阻止或减慢我的脚本并在服务器上处理执行?

时间:2017-10-06 08:06:58

标签: php curl

我有一个接受请求并处理它们的应用程序。

我打算在此脚本执行中添加一个curl来将调用转发给另一个服务(用于服务迁移和测试目的)

我想确保通过curl转发此请求不会降低应用程序性能或服务器的速度。

一些伪代码:

 //Step 1: existing code

 //handle the request
 $req = new requestHandler($_REQUEST);
 //process the request
 $req->process();


 //Step 2 (TODO): add request forwarding here (unique request do not need to perform multi curls)
 $forward = new requestForwarding($_REQUEST);
 $forward->fire();

 //step3 (don't want this to be delayed by step 2)
 $req->printAnswer();

在步骤2,我可以做些什么不影响或最小化请求转发的一般影响?

我什么都不担心,我可以用一个简单的卷曲来实现它? 或者我应该采取一些预防措施?

由于

3 个答案:

答案 0 :(得分:0)

PHP执行后续执行。任何长时间运行的代码都会阻止输出到最终用户(Web浏览器)。因此,如果卷曲调用需要4秒钟,那么在将标头发送到客户端之前还需要4秒钟。

有数字方法可以避免这种情况。通过将其添加到作业队列,并从cron作业执行它。

如果你像PHP-FPM一样独立运行PHP,你可以使用像fastcgi_finish_request这样的东西

如果您不希望它们阻止对客户端的响应,您还可以设置一个处理这些请求的工作人员。

也可能有更多解决方案。只提一些我所知道的。

答案 1 :(得分:0)

使用标准CURL功能确实会降低脚本速度,具体取决于整个基础架构(与服务器的连接,请求的服务器速度等)。如果您请求的服务器稳定且网络相同,您可能会担心太多。

如果

$req->printAnswer();

需要某事。根据第2步中的请求,您根本无法做出选择。

如果没有,您有几种可能性:

  • Ole Haugset提供了一种可能性。
  • 也许可以改变第2步和第3步的顺序?
  • 添加一个cronjob,该cronjob适用于请求队列,并且不属于不应延迟的脚本。
  • 有(高级)运行curl异步的可能性,请参阅Async curl request in PHP

只是一些想法。

答案 2 :(得分:0)

当您有输入/输出操作时,这是向外部站点发出请求的情况,将阻止执行。取决于脚本的类型......可以异步完成。一个很好的选择是使用GuzzleClient并设置为异步模式。 http://docs.guzzlephp.org/en/stable/