网络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中 作为程序全局变量

 

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