來源:不言 發(fā)布時(shí)間:2018-09-18 15:25:26 閱讀量:667
本篇文章給大家?guī)淼膬?nèi)容是關(guān)于PHP中的SAPI是什么?如何實(shí)現(xiàn)?(圖文),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。
SAPI,特意去查了一下,它是 Server Application Programming Interface 的首字母縮寫,意思是服務(wù)器端應(yīng)用編程接口。
這是 PHP 內(nèi)核提供給外部調(diào)用其服務(wù)的接口,即外部系統(tǒng)可以通過 SAPI 來調(diào)用 PHP 提供的編譯腳本、執(zhí)行腳本的服務(wù)。PHP 中實(shí)現(xiàn)的 SAPI 有很多,Cli、Fpm 是我們比較常見的。
圖片來源于網(wǎng)絡(luò)
接下來主要是討論下我們常見的 Cli、和 Fpm 是如何工作的。
Cli(Command Line Interface),即命令行接口,用于在命令行下執(zhí)行 PHP 腳本,就像 Shell 那樣,它是執(zhí)行 PHP 腳本最簡(jiǎn)便的一種方式。
Cli 是單進(jìn)程模式,處理完請(qǐng)求后就直接關(guān)閉了,生命周期先后經(jīng)歷 module startup、request startup、execute script、request shutdown、module shutdown,其執(zhí)行流程比較簡(jiǎn)單,關(guān)鍵的處理過程如下:
1 | main()-> php_cli_startup()-> do_cli()-> php_module_shutdown() |
Fpm(FastCGI Process Manager)是 PHP FastCGI 運(yùn)行模式的一個(gè)進(jìn)程管理器,從它的定義可以看出,F(xiàn)pm的核心功能是進(jìn)程管理。
FastCGI 是 Web 服務(wù)器(如Nginx、Apache)和處理程序之間的一種通信協(xié)議,它是與HTTP類似的一種應(yīng)用層通信協(xié)議。
注意:它只是一種協(xié)議!
Fpm 是一種多進(jìn)程模型,它由一個(gè) master 進(jìn)程和多個(gè) worker 進(jìn)程組成。master 進(jìn)程啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè) socket,但是不會(huì)接收、處理請(qǐng)求,而是由 fork 出的 worker 子進(jìn)程完成請(qǐng)求的接收及處理。即 master 進(jìn)程管理 worker 進(jìn)程,而 worker 進(jìn)程才是真正的處理請(qǐng)求。
Fpm 在啟動(dòng)后首先會(huì)進(jìn)行 SAPI 的注冊(cè)操作;接著會(huì)進(jìn)入 PHP 生命周期的 module startup
階段,在這個(gè)階段會(huì)調(diào)用各個(gè)擴(kuò)展定義的 MINT 鉤子函數(shù)。然后會(huì)進(jìn)行一系列的初始化操作,最后 master、worker 進(jìn)程進(jìn)入不同的處理環(huán)節(jié)。
worder 進(jìn)程的生命周期如下圖:
圖片來源于網(wǎng)絡(luò)
其生命周期主要經(jīng)歷這幾個(gè)階段:等待請(qǐng)求、解析請(qǐng)求、請(qǐng)求初始化、執(zhí)行 PHP 腳本、關(guān)閉請(qǐng)求。
master 進(jìn)程主要通過三種不同的方式來管理 worder 進(jìn)程,分別是靜態(tài)模式(static)、動(dòng)態(tài)模式(dynamic)、按需模式(ondemand)。具體要使用哪種模式可以在conf配置中通過pm指定
在線
客服
服務(wù)時(shí)間:周一至周日 08:30-18:00
選擇下列產(chǎn)品馬上在線溝通:
客服
熱線
7*24小時(shí)客服服務(wù)熱線
關(guān)注
微信
關(guān)注官方微信