亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP7內核CGI與FastCGI詳解

 更新時間:2019年04月14日 10:37:54   投稿:laozhang  
在本篇文章里小編給大家整理了關于PHP7內核CGI與FastCGI的相關知識點內容,需要的朋友們學習下。

CGI:是 Web Server 與 Web Application 之間數據交換的一種協議。
FastCGI:同 CGI,是一種通信協議,但比 CGI 在效率上做了一些優(yōu)化。

PHP-CGI:是 PHP (Web Application)對 Web Server 提供的 CGI 協議的接口程序。

PHP-FPM:是 PHP(Web Application)對 Web Server 提供的 FastCGI 協議的接口程序,額外還提供了相對智能一些任務管理

CGI工作流程

1.如果客戶端請求的是 index.html,那么Web Server會去文件系統(tǒng)中找到這個文件,發(fā)送給瀏覽器,這里分發(fā)的是靜態(tài)數據。

2.當Web Server收到 index.php 這個請求后,會啟動對應的 CGI 程序,這里就是PHP的解析器。接下來PHP解析器會解析php.ini文件,初始化執(zhí)行環(huán)境,然后處理請求,再以規(guī)定CGI規(guī)定的格式返回處理后的結果,退出進程,Web server再把結果返回給瀏覽器。

FastCGI工作流程

1.如果客戶端請求的是 index.html,那么Web Server會去文件系統(tǒng)中找到這個文件,發(fā)送給瀏覽器,這里分發(fā)的是靜態(tài)數據。

2.當Web Server收到 index.php 這個請求后,FastCGI程序(FastCGI在啟動時就初始化執(zhí)行執(zhí)行環(huán)境,每個CGI進程池各個CGI進程共享執(zhí)行環(huán)境)在CGI進程池中選擇一個CGI進程處理請求,再以規(guī)定CGI規(guī)定的格式返回處理后的結果,繼續(xù)等待下一個請求。

PHP-FPM基本實現

1.PHP-FPM的實現就是創(chuàng)建一個master進程,在master進程中創(chuàng)建worker pool并讓其監(jiān)聽socket,然后fork出多個子進程(work),這些子進程各自accept請求,子進程的處理非常簡單,它在啟動后阻塞在accept上,有請求到達后開始讀取請求數據,讀取完成后開始處理然后再返回,在這期間是不會接收其它請求的,也就是說PHP-FPM的子進程同時只能響應一個請求,只有把這個請求處理完成后才會accept下一個請求

2.PHP-FPM的master進程與worker進程之間不會直接進行通信,master通過共享內存獲取worker進程的信息,比如worker進程當前狀態(tài)、已處理請求數等,當master進程要殺掉一個worker進程時則通過發(fā)送信號的方式通知worker進程。

3.PHP-FPM可以同時監(jiān)聽多個端口,每個端口對應一個worker pool,而每個pool下對應多個worker進程

Worker工作流程

1.等待請求: worker進程阻塞在fcgi_accept_request()等待請求;

2.解析請求: fastcgi請求到達后被worker接收,然后開始接收并解析請求數據,直到request數據完全到達;

3.請求初始化: 執(zhí)行php_request_startup(),此階段會調用每個擴展的:PHP_RINIT_FUNCTION();

4.編譯、執(zhí)行: 由php_execute_script()完成PHP腳本的編譯、執(zhí)行;

5.關閉請求: 請求完成后執(zhí)行php_request_shutdown(),此階段會調用每個擴展的:PHP_RSHUTDOWN_FUNCTION(),然后進入步驟(1)等待下一個請求。

Master進程管理

1.static: 這種方式比較簡單,在啟動時master按照pm.max_children配置fork出相應數量的worker進程,即worker進程數是固定不變的

2.dynamic: 動態(tài)進程管理,首先在fpm啟動時按照pm.start_servers初始化一定數量的worker,運行期間如果master發(fā)現空閑worker數低于pm.min_spare_servers配置數(表示請求比較多,worker處理不過來了)則會fork worker進程,但總的worker數不能超過pm.max_children,如果master發(fā)現空閑worker數超過了pm.max_spare_servers(表示閑著的worker太多了)則會殺掉一些worker,避免占用過多資源,master通過這4個值來控制worker數

3.ondemand: 這種方式一般很少用,在啟動時不分配worker進程,等到有請求了后再通知master進程fork worker進程,總的worker數不超過pm.max_children,處理完成后worker進程不會立即退出,當空閑時間超過pm.process_idle_timeout后再退出

PHP-FPM事件管理器

1.sp[1]管道可讀事件:這個事件是master用于處理信號的

2.fpm_pctl_perform_idle_server_maintenance_heartbeat():這是進程管理實現的主要事件,master啟動了一個定時器,每隔1s觸發(fā)一次,主要用于dynamic、ondemand模式下的worker管理,master會定時檢查各worker pool的worker進程數,通過此定時器實現worker數量的控制

3.fpm_pctl_heartbeat():這個事件是用于限制worker處理單個請求最大耗時的,php-fpm.conf中有一個request_terminate_timeout的配置項,如果worker處理一個請求的總時長超過了這個值那么master將會向此worker進程發(fā)送kill -TERM信號殺掉worker進程,此配置單位為秒,默認值為0表示關閉此機制

4.fpm_pctl_on_socket_accept():ondemand模式下master監(jiān)聽的新請求到達的事件,因為ondemand模式下fpm啟動時是不會預創(chuàng)建worker的,有請求時才會生成子進程,所以請求到達時需要通知master進程

相關文章

  • php實現接口api數據簽名及驗簽

    php實現接口api數據簽名及驗簽

    api數據簽名作用就是通過使用簽名可以驗證數據在傳輸過程中是否被篡改或修改,下面小編就來為大家介紹一下php如何實現接口api數據簽名及驗簽吧
    2023-11-11
  • 探討如何在php168_cms中提取驗證碼

    探討如何在php168_cms中提取驗證碼

    本篇文章是對在php168_cms中提取驗證碼進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • php cookie的操作實現代碼(登錄)

    php cookie的操作實現代碼(登錄)

    cookie 常用于識別用戶。cookie 是服務器留在用戶計算機中的小文件。每當相同的計算機通過瀏覽器請求頁面時,它同時會發(fā)送 cookie。通過 PHP,您能夠創(chuàng)建并取回 cookie 的值。
    2010-12-12
  • php表單提交程序的安全使用方法

    php表單提交程序的安全使用方法

    是對一個接收自由提交表單數據的文件進行安全性分析,希望對各位有幫助。首先說明一下,代碼中的error()和succeed()是我自定義的函數
    2008-07-07
  • php實現的zip文件內容比較類

    php實現的zip文件內容比較類

    這篇文章主要介紹了php實現的zip文件內容比較類及其用法,可實現比較兩個zip文件的內容,返回新增、刪除、及相同的文件列表,是非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • dedecms中常見問題修改方法總結

    dedecms中常見問題修改方法總結

    dedecms中常見問題修改方法總結...
    2007-03-03
  • php反彈shell實現代碼

    php反彈shell實現代碼

    遇到一個BT的網站,上傳php文件成功之后,每訪問一次,文件名就會隨機改變一次,并且你訪問當前文件如果點其他操作項,文件仍然會改名。
    2009-04-04
  • php多數據庫支持的應用程序設計

    php多數據庫支持的應用程序設計

    以前做PHP應用,多數是單數據庫數據查詢和更新,頂多也是主從數據庫的支持,實現起來相對簡單。主從數據庫的問題在于,當會話存儲在數據庫的時候,同步將可能出現問題,也就是說有可能出現會話的中斷。
    2008-08-08
  • Warning:?require():?open_basedir?restriction?in?effect,目錄配置open_basedir報錯問題分析

    Warning:?require():?open_basedir?restriction?in?effect,

    在linux服務器部署thinkphp5的時候PHP報了Warning:?require():?open_basedir?restriction?in?effect這個錯誤,是因為網站目錄配置錯誤,PHP不能引入其授權目錄上級及其以上的文件。下面詳細講解如何處理這個問題,需要的朋友可以參考下
    2022-11-11
  • mysql_connect localhost和127.0.0.1的區(qū)別(網絡層闡述)

    mysql_connect localhost和127.0.0.1的區(qū)別(網絡層闡述)

    這篇文章主要介紹了mysql_connect localhost和127.0.0.1的區(qū)別(網絡層闡述),本文從網絡通信層面講解了它們的不同,需要的朋友可以參考下
    2015-03-03

最新評論