swoole( 网络IO 十一)

 

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';
 
发布了66 篇原创文章 · 获赞 2 · 访问量 4646

猜你喜欢

转载自blog.csdn.net/converoscar/article/details/104278221
今日推荐