我有一个接受请求并处理它们的应用程序。
我打算在此脚本执行中添加一个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,我可以做些什么不影响或最小化请求转发的一般影响?
我什么都不担心,我可以用一个简单的卷曲来实现它? 或者我应该采取一些预防措施?
由于
答案 0 :(得分:0)
PHP执行后续执行。任何长时间运行的代码都会阻止输出到最终用户(Web浏览器)。因此,如果卷曲调用需要4秒钟,那么在将标头发送到客户端之前还需要4秒钟。
有数字方法可以避免这种情况。通过将其添加到作业队列,并从cron作业执行它。
如果你像PHP-FPM一样独立运行PHP,你可以使用像fastcgi_finish_request这样的东西
如果您不希望它们阻止对客户端的响应,您还可以设置一个处理这些请求的工作人员。
也可能有更多解决方案。只提一些我所知道的。
答案 1 :(得分:0)
使用标准CURL功能确实会降低脚本速度,具体取决于整个基础架构(与服务器的连接,请求的服务器速度等)。如果您请求的服务器稳定且网络相同,您可能会担心太多。
如果
$req->printAnswer();
需要某事。根据第2步中的请求,您根本无法做出选择。
如果没有,您有几种可能性:
只是一些想法。
答案 2 :(得分:0)
当您有输入/输出操作时,这是向外部站点发出请求的情况,将阻止执行。取决于脚本的类型......可以异步完成。一个很好的选择是使用GuzzleClient并设置为异步模式。 http://docs.guzzlephp.org/en/stable/