2017-10-06 19 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/

相關問題