事件驅動的編程為習慣於程序編碼的PHP開發人員提出了一個獨特的挑戰。 在PHP的程序性質中,事件通常歸結為簡單的函數調用,而沒有固有的異步行為。 所有代碼執行仍然阻塞。
但是,像JavaScript這樣的語言將事件循環作為中心組件的潛力。 該見解使開發人員將事件循環和異步功能集成到PHP HTTP服務器中。本文展示了構建利用Icicle庫的高性能PHP HTTP服務器,並將其與Apache集成以進行優化的靜態文件服務。 示例代碼可在https://github.com/sitepoint-editors/icicle-http-server 。 [2 [2
icicle的異步力:靜態文件的apache Integration:有效地將靜態文件卸載到apache上,使PHP Icicle服務器可處理動態請求。
使用路由器擴展基本服務器(如League \ Route)允許進行複雜的請求處理和路由。 模板引擎(例如League \ Plates)添加了為複雜應用程序的佈局和模板繼承等功能。 apache Configuration用於優化的靜態文件服務
要避免使用靜態文件的不必要的PHP處理,請配置Apache直接服務它們:為了更強大的路由,請集成League \ Route: [2 [2 // server.php // ...(以前的導入)... 使用League \ Route \ http \ exception \ MethodNotloweredException; 使用League \ Route \ http \ exception \ notfoundException; 使用League \ Route \ RuteCollection; 使用League \ Route \ strument \ Uristrategy; // ...(服務器創建)... $ router = new RuteCollection(); $ router-> setstrategy(new Uristrategy()); 需要__________。 “/routes.php”; $ dispatcher = $ router-> getDisPatcher(); 嘗試 { $ result = $ dispatcher-> dispatch($ request-> getMethod(),$ request-> getRequestTarget()); $狀態= 200; $ content = $ result-> getContent(); } catch(notFoundException $ e){ $狀態= 404; $ content =“找不到”; } catch(methodnotallowedexception $ e){ $狀態= 405; $ content =“不允許的方法”; } // ...(響應創建和發送)...
[2 [2 返回“ Hello World”; });
[2有關複雜的視圖,請使用League \ plates:
原始文章包括性能基準測試,以演示服務器處理大量並發請求的功能。 這些基準應在其運行的特定硬件和條件的背景下進行考慮。 關鍵要點是通過Icicle的異步模型具有高性能的潛力。 本文通過鼓勵實驗和社區討論結束。 還包括由Icicle作者提供的更新的基準測試。 FAQ部分進一步闡明了使用Icicle進行服務器開發的各個方面。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3