知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁 » 新聞資訊 » 網(wǎng)站建設(shè) >
PHP開發(fā)web程序的兩種模式
發(fā)表時(shí)間:2017-7-16
發(fā)布人:葵宇科技
瀏覽次數(shù):39
本文適合對(duì)PHP web開發(fā)比較感興趣的同學(xué)閱讀,需要具備一定的web后臺(tái)開發(fā)經(jīng)驗(yàn)。
一、背景
從執(zhí)行流程上來看,所有程序可以分為同步程序和異步程序。眾所周知,同步程序流程清晰,開發(fā)友好,容易上手,相比之下異步程序的優(yōu)點(diǎn)在于程序并發(fā)度高,資源能夠得到充分利用。于是出現(xiàn)了一些基于協(xié)程調(diào)度的框架,兼具同步程序和異步程序的優(yōu)點(diǎn)。對(duì)應(yīng)到PHP領(lǐng)域,除了傳統(tǒng)的LAMP/LNMP同步開發(fā)模式,還出現(xiàn)了類似swoole的異步協(xié)程開發(fā)模式。本文通過對(duì)兩種開發(fā)模式進(jìn)行比較,旨在說明二者實(shí)現(xiàn)上的異同,供廣大PHP程序員參考。
二、LAMP/LNMP
一直以來,PHP web開發(fā)采用LAMP/LNMP架構(gòu),即Linux、Nginx,Mysql和PHP。搭建的環(huán)境大同小異,大致結(jié)構(gòu)為:
當(dāng)請(qǐng)求進(jìn)入時(shí),web server將請(qǐng)求轉(zhuǎn)交給PHP-FPM,PHP-FPM是一個(gè)進(jìn)程池架構(gòu)的FastCGI服務(wù),內(nèi)置PHP解釋器。FPM負(fù)責(zé)解釋執(zhí)行PHP文件生成響應(yīng),最終返回給web server,展現(xiàn)至前端。PHP文件中實(shí)現(xiàn)了許多業(yè)務(wù)邏輯,包括Mysql和Nosql的訪問,調(diào)用第三方應(yīng)用等等。
由圖可見,從請(qǐng)求到響應(yīng),整個(gè)處理流程十分清晰,層次結(jié)構(gòu)也很明顯,大致分為接入層,邏輯層和數(shù)據(jù)訪問層。但是這個(gè)架構(gòu)的缺點(diǎn)也很明顯,主要包括:
-
FPM進(jìn)程池中進(jìn)程數(shù)目有限,在高并發(fā)場(chǎng)景下處理能力可能會(huì)受進(jìn)程數(shù)目和系統(tǒng)其他資源的限制
-
當(dāng)后端PHP程序長(zhǎng)時(shí)間阻塞時(shí),會(huì)掛起整個(gè)PHP-FPM進(jìn)程
-
每次請(qǐng)求處理的過程都意味著一次PHP文件解析,環(huán)境設(shè)置等不必要的耗時(shí)操作
-
PHP進(jìn)程處理完即銷毀,無法在PHP程序中使用連接池等技術(shù)實(shí)現(xiàn)性能優(yōu)化
-
......
針對(duì)上述問題,LAMP/LNMP架構(gòu)做了許多優(yōu)化和調(diào)整,比如:
-
設(shè)置超時(shí)時(shí)間防止FPM假死
-
利用Opcache擴(kuò)展避免PHP文件的重復(fù)解析和加載
-
采用本地代理的方式實(shí)現(xiàn)降低建立連接的開銷
-
......
三、Swoole
針對(duì)LAMP/LNMP架構(gòu)的問題,swoole從PHP擴(kuò)展出發(fā),解決了上述問題,其采用的進(jìn)程模型為:
Swoole底層使用多進(jìn)程架構(gòu),Master-Manager-Worker。
-
Master進(jìn)程內(nèi)置多個(gè)Reactor線程進(jìn)行網(wǎng)絡(luò)收發(fā)包,當(dāng)收到完整的請(qǐng)求之后,其將請(qǐng)求轉(zhuǎn)交給Worker進(jìn)程執(zhí)行業(yè)務(wù)邏輯。
-
Manager進(jìn)程由Master進(jìn)程派生而成,主要負(fù)責(zé)Worker進(jìn)程的創(chuàng)建和銷毀類工作。
-
Worker進(jìn)程執(zhí)行PHP業(yè)務(wù)邏輯代碼,生成響應(yīng)后發(fā)送至Master進(jìn)程的Reactor線程,最終展現(xiàn)至前端。
-
進(jìn)程模型中還包括taskWorker,主要執(zhí)行一些額外的耗時(shí)task任務(wù)等。
相比于LAMP/LNMP,Swoole進(jìn)程模型最大的特點(diǎn)在于其多線程Reactor模式處理網(wǎng)絡(luò)請(qǐng)求,使得其能輕松應(yīng)對(duì)C10k連接。除此之外的優(yōu)點(diǎn)還包括:
-
全異步非阻塞,占用資源開銷小,程序執(zhí)行效率高
-
程序運(yùn)行只解析加載一次PHP文件,避免每次請(qǐng)求的重復(fù)加載
-
進(jìn)程常駐,使得連接池和請(qǐng)求之間信息傳遞等的實(shí)現(xiàn)成為可能
-
......
Swoole在擴(kuò)展層面實(shí)現(xiàn)異步非阻塞操作,提供給PHP回調(diào)的操作接口。由于回調(diào)寫法嵌套較深,邏輯混亂,現(xiàn)有的基于Swoole的PHP框架多數(shù)采用yield協(xié)程調(diào)度的方式實(shí)現(xiàn),這樣就可以用同步的代碼寫法來達(dá)到異步的效果,典型實(shí)現(xiàn)如ZanPHP框架。
當(dāng)然,協(xié)程的寫法也并不是沒有代價(jià),開發(fā)者需要更多地了解一些底層的原理實(shí)現(xiàn),相比LAMP/LNMP來說對(duì)于開發(fā)者的門檻較高。
四、總結(jié)
綜合以上區(qū)別,筆者建議,在簡(jiǎn)單的http server開發(fā)場(chǎng)景下,優(yōu)先采用LAMP/LNMP架構(gòu),更加專注于業(yè)務(wù)邏輯實(shí)現(xiàn)。在高并發(fā)或?qū)τ谛阅鼙容^關(guān)注的場(chǎng)景,或者需要實(shí)現(xiàn)類似tcp server,RPC服務(wù),SOA服務(wù)等情形下,建議使用基于swoole的協(xié)程調(diào)度框架,如ZanPHP等。
想要獲取最新技術(shù)文章?歡迎訂閱微信公眾號(hào)----軟件編程之路,鼓勵(lì)作者持續(xù)寫作。
相關(guān)案例查看更多
相關(guān)閱讀
- 出入小程序
- 云南小程序設(shè)計(jì)
- 江蘇小程序開發(fā)
- vue開發(fā)小程序
- 公眾號(hào)模板消息
- 百度小程序開發(fā)公司
- 云南軟件開發(fā)
- 排名
- 報(bào)廢車拆解回收管理系統(tǒng)
- 云南網(wǎng)站開發(fā)
- 云南小程序開發(fā)哪家好
- 昆明小程序代建
- 網(wǎng)站建設(shè)專業(yè)品牌
- 楚雄網(wǎng)站建設(shè)公司
- 云南百度小程序
- 小程序用戶登錄
- 網(wǎng)站建設(shè)服務(wù)公司
- 重慶網(wǎng)站建設(shè)公司
- 昆明小程序公司
- uniapp開發(fā)小程序
- 網(wǎng)站建設(shè)首頁
- 高端網(wǎng)站建設(shè)公司
- 電商網(wǎng)站建設(shè)
- 小程序表單
- 云南網(wǎng)站建設(shè)制作
- 云南軟件定制
- 云南網(wǎng)絡(luò)營(yíng)銷
- 云南網(wǎng)站建設(shè)百度
- 云南電商網(wǎng)站建設(shè)
- 小程序生成海報(bào)