swoole_server中對象的4層生命週期 |
程序全局期 在 Server->start 之前就創建好的對象,我們稱之爲程序全局生命週期。這些變量在程序啓動後就會一直存在,直到整個程序結束運行纔會銷燬。
有一些服務器程序可能會連續運行數月甚至數年纔會關閉/重啓,那麼程序全局期的對象在這段時間持續駐留在內存中的。
程序全局期include/require的代碼,必須在整個程序shutdown時纔會釋放,reload無效
進程全局期 (針對worker進程) 進程全局對象所佔用的內存是在當前子進程內存堆的,並非共享內存。
對此對象的修改僅在當前Worker進程中有效 進程期include/require的文件,在reload後就會重新加載
會話期 (加了global 針對於客戶端連接) 會話期是在 onConnect 後創建,或者在第一次onReceive時創建,onClose時銷燬。
請求期 (只針對函數的執行) 請求期就是指一個完整的請求發來,也就是onReceive收到請求開始處理,直到返回結果發送response。
請求期對象與普通PHP程序中的對象就是一樣的。請求到來時創建,請求結束後銷燬。
|
swoole_server中內存管理機制 (因爲swoole是常駐內存,如果變量不回收,變量就會變得越來越大)
傳統的fpm,運行完之後就會關閉,並不需要關心這個問題 |
|
Swoole接收json,xml的數據 |
Http\Request->rawContent |
利用swoole加速框架 |
要值得注意的是swoole加速的是ioc類型的框架:
ioc簡單來說就是一個數組 ,把我們在框架中所需要使用的數據庫操作的類,redis操作對象,view視圖操作類等等放置在數組中保存,根據標識做區別而已; |
Fastcgi運行模式 傳統的fpm |
Php.ini配置事先加載好 加載並解析 放到內存中 執行完後銷燬 |
Swoole |
會把變量一直放在內存中,處理,響應,並不會結束
主要減少了解析的時間,也不需要去銷燬 |
加速的框架類型:IOC |
ioc我們也稱爲容器
把各種功能類 (model,controller,redis,view,route...)放在ioc容器中,而且這些功能類我們也可以看作是object
標誌 :: model
|
ioc框架的生命週期 |
Public/index.php
Application/app (一般繼承於container) ,這裏會從容器中獲取到實例對象,處理用戶請求,這個過程就不會再重複地new 是worker進程全局期
初始化的方法(會把框架所用到的核心實例對象放到容器中), 是程序全局期
所謂的加速就是把 ioc(上面紅色部分) 放在 swoole中 作爲程序全局變量
|
網絡IO 十五
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.