網絡IO 十五

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中 作爲程序全局變量

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章