swoole( 网络IO 十一)
|
Pstree -apn | grep server.php 显示父进程 子进程 |
信号重启产生的问题 |
主要是子进程通过break跳出for之后进入了monitorWorkersForLinux中阻塞了,通过修改fork方法解决 Event :: add() 非阻塞的,不用执行类似loop的启动函数 Break/exit 避免子进程再创建子进程
信号安装那里阻塞了
记录主进程pid然后停止
为什么父进程杀不死? 因为没有记录父进程的pid
信号安装是死循环,父pid记录在启动里面
重启: 只是停止工作进程,主进程不停止的
信号是怎么运行的? 1.安装 sign 2.分发 dispatch 3.调用 kill -> pid信号 ->运行(内核处理)
信号为什么需要循环? 因为如果不循环,只会杀死一个子进程 死循环是有多少个子进程,就可以回收多少个
父进程被kill,子进程依然运行 因为父进程不具备管理子进程的功能 为什么不具备? 孤儿进程,父进程已经走完,会把子进程丢弃给内核,子进程就不再收到父进程的控制
调整添加对于ctrl+c操作的监听 |
实现模型的reload功能 |
记录与获取pid的操作 我们可以通过把该信息记录在文件中,这样的话我们可以再次调用worker中的reload就可以很好地重启进程
添加一个工具类 |
代码热加载 |
主要是针对于开发,不建议生产环境下
为什么修改代码之后不会生效? Php-fpm这种运行方式是属于常驻内存,运行之后变量和属性会保存在内存中
启动->加载 扩展->编译代码->加载变量放在内存中->输出结果->结束 (短暂性)
加载变量放在内存中->输出结果 (持久性)
思路: 1.重新启动worker进程 2.可以在文件发生改变的时候重启 .php文件的变化 3.inotify => php监控文件的变化扩展
怎么用inotify? 1.inotify_init() 初始化inotify 2.inotify_add_watch() 针对于某一个文件进行监听 3.inotify_read() 读取发送变化的文件 是会阻塞的
1.需要获取文件目录 2.一个个把文件目录下的文件进行监听 3.每当一个文件发生改变的时候 重启worker进程
写成了一个类 |
心跳检测 |
心跳检测: 服务端->对于客户端在一定时间内进行检测 可以理解为,客户端发送了一个信息之后多久没有联系,定时器
1.实际上只需要延时去进行关闭连接即可 2.然后在规定的时间内清空定时器即可 |