欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

PHP開發(fā)web程序的兩種模式 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 網(wǎng)站建設(shè) >

PHP開發(fā)web程序的兩種模式

發(fā)表時間:2017-7-16

發(fā)布人:葵宇科技

瀏覽次數(shù):39

本文適合對PHP web開發(fā)比較感興趣的同學(xué)閱讀,需要具備一定的web后臺開發(fā)經(jīng)驗。

一、背景

從執(zhí)行流程上來看,所有程序可以分為同步程序和異步程序。眾所周知,同步程序流程清晰,開發(fā)友好,容易上手,相比之下異步程序的優(yōu)點在于程序并發(fā)度高,資源能夠得到充分利用。于是出現(xiàn)了一些基于協(xié)程調(diào)度的框架,兼具同步程序和異步程序的優(yōu)點。對應(yīng)到PHP領(lǐng)域,除了傳統(tǒng)的LAMP/LNMP同步開發(fā)模式,還出現(xiàn)了類似swoole的異步協(xié)程開發(fā)模式。本文通過對兩種開發(fā)模式進行比較,旨在說明二者實現(xiàn)上的異同,供廣大PHP程序員參考。

二、LAMP/LNMP

一直以來,PHP web開發(fā)采用LAMP/LNMP架構(gòu),即Linux、Nginx,Mysql和PHP。搭建的環(huán)境大同小異,大致結(jié)構(gòu)為:

當(dāng)請求進入時,web server將請求轉(zhuǎn)交給PHP-FPM,PHP-FPM是一個進程池架構(gòu)的FastCGI服務(wù),內(nèi)置PHP解釋器。FPM負(fù)責(zé)解釋執(zhí)行PHP文件生成響應(yīng),最終返回給web server,展現(xiàn)至前端。PHP文件中實現(xiàn)了許多業(yè)務(wù)邏輯,包括Mysql和Nosql的訪問,調(diào)用第三方應(yīng)用等等。

由圖可見,從請求到響應(yīng),整個處理流程十分清晰,層次結(jié)構(gòu)也很明顯,大致分為接入層,邏輯層和數(shù)據(jù)訪問層。但是這個架構(gòu)的缺點也很明顯,主要包括:

  • FPM進程池中進程數(shù)目有限,在高并發(fā)場景下處理能力可能會受進程數(shù)目和系統(tǒng)其他資源的限制

  • 當(dāng)后端PHP程序長時間阻塞時,會掛起整個PHP-FPM進程

  • 每次請求處理的過程都意味著一次PHP文件解析,環(huán)境設(shè)置等不必要的耗時操作

  • PHP進程處理完即銷毀,無法在PHP程序中使用連接池等技術(shù)實現(xiàn)性能優(yōu)化

  • ......

針對上述問題,LAMP/LNMP架構(gòu)做了許多優(yōu)化和調(diào)整,比如:

  • 設(shè)置超時時間防止FPM假死

  • 利用Opcache擴展避免PHP文件的重復(fù)解析和加載

  • 采用本地代理的方式實現(xiàn)降低建立連接的開銷

  • ......

三、Swoole

針對LAMP/LNMP架構(gòu)的問題,swoole從PHP擴展出發(fā),解決了上述問題,其采用的進程模型為:


Swoole底層使用多進程架構(gòu),Master-Manager-Worker。

  • Master進程內(nèi)置多個Reactor線程進行網(wǎng)絡(luò)收發(fā)包,當(dāng)收到完整的請求之后,其將請求轉(zhuǎn)交給Worker進程執(zhí)行業(yè)務(wù)邏輯。

  • Manager進程由Master進程派生而成,主要負(fù)責(zé)Worker進程的創(chuàng)建和銷毀類工作。

  • Worker進程執(zhí)行PHP業(yè)務(wù)邏輯代碼,生成響應(yīng)后發(fā)送至Master進程的Reactor線程,最終展現(xiàn)至前端。

  • 進程模型中還包括taskWorker,主要執(zhí)行一些額外的耗時task任務(wù)等。

相比于LAMP/LNMP,Swoole進程模型最大的特點在于其多線程Reactor模式處理網(wǎng)絡(luò)請求,使得其能輕松應(yīng)對C10k連接。除此之外的優(yōu)點還包括:

  • 全異步非阻塞,占用資源開銷小,程序執(zhí)行效率高

  • 程序運行只解析加載一次PHP文件,避免每次請求的重復(fù)加載

  • 進程常駐,使得連接池和請求之間信息傳遞等的實現(xiàn)成為可能

  • ......

Swoole在擴展層面實現(xiàn)異步非阻塞操作,提供給PHP回調(diào)的操作接口。由于回調(diào)寫法嵌套較深,邏輯混亂,現(xiàn)有的基于Swoole的PHP框架多數(shù)采用yield協(xié)程調(diào)度的方式實現(xiàn),這樣就可以用同步的代碼寫法來達到異步的效果,典型實現(xiàn)如ZanPHP框架。

當(dāng)然,協(xié)程的寫法也并不是沒有代價,開發(fā)者需要更多地了解一些底層的原理實現(xiàn),相比LAMP/LNMP來說對于開發(fā)者的門檻較高。

四、總結(jié)

綜合以上區(qū)別,筆者建議,在簡單的http server開發(fā)場景下,優(yōu)先采用LAMP/LNMP架構(gòu),更加專注于業(yè)務(wù)邏輯實現(xiàn)。在高并發(fā)或?qū)τ谛阅鼙容^關(guān)注的場景,或者需要實現(xiàn)類似tcp server,RPC服務(wù),SOA服務(wù)等情形下,建議使用基于swoole的協(xié)程調(diào)度框架,如ZanPHP等。

想要獲取最新技術(shù)文章?歡迎訂閱微信公眾號----軟件編程之路,鼓勵作者持續(xù)寫作。


相關(guān)案例查看更多