PHP利用fastcgi_finish_request()函數實現異步操做,提升響應速度

某些操做,如用戶註冊後郵件發送,記錄日誌等一些耗時操做能夠轉化爲異步操做!當PHP運行在FastCGI模式是提供了fastcgi_finish_request()函數,看下面例子:php

 
  1. <?php
  2.  
  3. echo '輸出給客戶端的內容';
  4.  
  5. fastcgi_finish_request();
  6. sleep(3);
  7.  
  8. echo '放心吧,這裏的內容並不會輸出';
  9.  
  10. file_put_contents('log.txt', '這是客戶端響應結束後,服務器段腳本繼續執行後生成');


運行了次腳本,你會發現客戶端輸出上面一句話,fastcgi_finish_request()下面的內容並無輸出,可是卻生成了文件,如此說明了調用了fastcgi_finish_request後,客戶端響應就已經結束,但與此同時服務端腳本卻繼續運行。這在必定程度上提升了響應速度,固然更科學的作法是:使用fastcgi_finish_request()函數集成隊列消息,能夠把消息異步發 送到隊列。
fastcgi_finish_reques()函數的缺點:
1.PHP FastCGI 進程數有限,正在處理異步操做的php-cgi進程,沒法處理新請求;
2.若是併發訪問量較大,php-cgi進程數用滿,新訪問請求,將沒有php-cgi去處理。Nginx服務器會出現: 502 Bad Gateway。服務器

相關文章
相關標籤/搜索