2017-10-06 57 views
0

我有一个接受请求并处理它们的应用程序。添加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步做什么不会影响或最小化前的请求的一般影响?

我难为情,我可以用简单的卷曲来实现它吗? 或者我应该采取一些预防措施?

谢谢

+0

这一切都取决于您“转发”请求的服务。 –

回答

0

PHP执行顺序。任何长时间运行的代码都会阻止输出到最终用户(网络浏览器)。因此,如果curl调用需要4秒钟,那么在标题发送到客户端之前还需要4秒钟的时间。

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

如果您正在运行单独PHP作为一个独立的,像PHP-FPM,您可以使用类似fastcgi_finish_request

您还可以设置一个用于处理这些请求一个工人,如果你不希望他们阻止响应给客户。

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

0

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

如果

$req->printAnswer(); 

要求某事。从步骤2中的请求中,您根本没有选择。

如果不是,有几种可能给你:

  • 奥莱Haugset只是提供了一个可能性。
  • 也许有可能更改第2步和第3步的顺序?
  • 添加一个对请求队列起作用的cronjob,它不属于不应该延迟的脚本的一部分。
  • 有(高级)的可能性,运行卷曲异步,看到Async curl request in PHP

只是一些想法。

0

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

相关问题