| Pstree -apn | grep server.php 显示父进程 子进程 |
信号重启产生的问题 | 1.客户端发送信息没有反应主要是子进程通过break跳出for之后进入了monitorWorkersForLinux中阻塞了,通过修改fork方法解决
swoole中的Event :: add() 是将一个底层的reactor加入到底层的事件监听中 非阻塞的,已经异步执行这个函数,不用额外执行原生的event的loop的启动函数
Break/exit 避免子进程再创建子进程
信号安装那里阻塞了
2.Stop不能停止整个程序(只能杀死子进程,父进程无法杀死)记录父进程的pid,然后停止
3.为什么父进程杀不死?因为没有记录父进程的pid
信号安装是死循环,父pid记录在启动里面
重启: 只是停止工作进程,主进程不停止的
2.通过信号重启worker进程之后杀死父进程而子进程还会存在的问题
4.信号是怎么运行的?1.安装 sign 2.分发 dispatch 3.调用 kill -> pid信号 ->运行(内核处理)
5.信号为什么需要循环?因为如果不循环,只会杀死回收一个子进程 死循环是有多少个子进程,就可以回收多少个
6.父进程被kill,子进程依然运行因为父进程不具备管理子进程的功能 为什么不具备? 孤儿进程,父进程已经走完,会把子进程丢弃给内核,子进程就不再收到父进程的控制
调整添加对于ctrl+c操作的监听 |
实现模型的reload功能 | 记录与获取pid的操作 我们可以通过把该信息记录在文件中,这样的话我们可以再次调用worker中的reload就可以很好地重启进程
添加一个inotify工具类 |
代码热加载 | 主要是针对于开发,不建议生产环境下
为什么修改代码之后不会生效? 运行方式是属于常驻内存,运行之后变量和属性会保存在内存中
启动->加载 扩展->编译代码->加载变量放在内存中->输出结果->结束 (短暂性)
加载变量放在内存中->输出结果 (持久性)
思路: 1.重新启动worker进程 2.可以在文件发生改变的时候重启 .php文件的变化 3.inotify => php监控文件的变化扩展
怎么用inotify? 1.inotify_init() 初始化inotify 2.inotify_add_watch() 针对于某一个文件进行监听 3.inotify_read() 读取发送变化的文件 是会阻塞的
1.需要获取文件目录 2.一个个把文件目录下的文件进行监听 3.每当一个文件发生改变的时候 重启worker进程
写成了一个类 |
心跳检测 | 心跳检测: 可以理解为,客户端发送了一个信息之后多久没有联系,定时器定时轮询
swoole_timer_tick 每隔多久执行一次,会一直执行,区别
设置在多久后检测是否还有在连接
swoole_timer_after
多少秒作为单位
heartbeat_check_interval = ' xx ';
heartbeat_idle_time = 'xx';
|
swoole( 网络IO 十一)
最新推荐文章于 2021-03-21 15:55:22 发布