请问webman中我想在master进程中运行自定义代码,比如访问一个webapi,根据返回结果来定义一些环境、参数或者退出服务,在哪里加比较优雅呢,谢谢~
为了保证整个服务稳定,master进程不允许有任何业务代码。 设置bootstrap,每个进程启动的时候会执行bootstrap的启动项
https://www.workerman.net/doc/webman/others/bootstrap.html
那可否这样,我自定义一个进程,从webapi获取数据后通知master进程重启、退出或者其他一些操作?
可以。 如果你要restart重启的话,自定义的控制进程需要单独一个脚本启动,因为自己无法重启自己。 reload或者其它操作可以一起启动。
也就是说,只能在 自定义进程中 使用exec来控制,而不能在php代码中获取到类似app的应用对象然后app->exit()什么的命令么?
重启有两种: 第一种:php start.php restart,主进程也重启那种 这种不支持自己重启自己。需要没有亲缘进程去执行才行。
第二种:子进程重启,主进程不重启,也就是reload reload只需要在业务代码中执行 posix_kill( posix_getppid(), SIGUSR1); 即可
不确认你具体要做什么 ,具体要的是哪种重启。
重启进程的需求是啥呢???
想做一种架构,一台主服务器控制一些子服务器去做一些操作,比如停止、重启某一台子服务器的服务这种,子服务器会过一段时间查询主服务器的命令,然后去执行。。貌似不太好弄,自定义进程好像不能通知主进程去执行停止、重启这种方式?
哦哦,大佬你这系统听着就很牛,加油
很简单的需求,只是有点不常见,社区搜了很多没搜到,等真大佬回复问题~
原来做过交易,抛砖引玉! 【客户自定义服务器】可以通过改动进程配置文件config/process.php,比如请求http接口获取要启动的业务进程,合并数组后return即可。
config/process.php
【遥控器】webman项目的根目录,单独新建一个脚本文件,启动一个worker,异步连接到中央服务器等待接收重启指令。 其他自由发挥,比如接收 进程配置,直接改写 上述的进程配置文件,然后给重启指令即可。
另外,所有在composer.json文件的 autoload.files 加载的文件,都会优先载入并运行; 意思就是,所有 autoload.files 文件加载运行后,才轮到 webman的start.php
感谢大佬回复,不过有两个小问题,1是composer.json文件的 autoload.files 加载的文件是可以等待HTTP阻塞调用并返回数据后再去运行webman的start.php吧?2是【遥控器】中,启动的这个worker好像是子进程,子进程不能调用restart去重启父进程。。
注意看题目,遥控器】webman项目的根目录,单独新建一个脚本文件,启动一个worker;这个是独立的两个进程(master进程、worker进程),当然可以调用webman的 start.php
回复:1是composer.json文件的 autoload.files 加载的文件是可以等待HTTP阻塞调用并返回数据后再去运行webman的start.php吧
答案:是的
【遥控器】webman项目的根目录,单独新建一个脚本文件,启动一个worker;这个脚本是单独启动的,与webman 没有亲缘关系。
为了保证整个服务稳定,master进程不允许有任何业务代码。
设置bootstrap,每个进程启动的时候会执行bootstrap的启动项
https://www.workerman.net/doc/webman/others/bootstrap.html
那可否这样,我自定义一个进程,从webapi获取数据后通知master进程重启、退出或者其他一些操作?
可以。
如果你要restart重启的话,自定义的控制进程需要单独一个脚本启动,因为自己无法重启自己。
reload或者其它操作可以一起启动。
也就是说,只能在 自定义进程中 使用exec来控制,而不能在php代码中获取到类似app的应用对象然后app->exit()什么的命令么?
重启有两种:
第一种:php start.php restart,主进程也重启那种
这种不支持自己重启自己。需要没有亲缘进程去执行才行。
第二种:子进程重启,主进程不重启,也就是reload
reload只需要在业务代码中执行 posix_kill( posix_getppid(), SIGUSR1); 即可
不确认你具体要做什么 ,具体要的是哪种重启。
重启进程的需求是啥呢???
想做一种架构,一台主服务器控制一些子服务器去做一些操作,比如停止、重启某一台子服务器的服务这种,子服务器会过一段时间查询主服务器的命令,然后去执行。。貌似不太好弄,自定义进程好像不能通知主进程去执行停止、重启这种方式?
哦哦,大佬你这系统听着就很牛,加油
很简单的需求,只是有点不常见,社区搜了很多没搜到,等真大佬回复问题~
原来做过交易,抛砖引玉!
【客户自定义服务器】可以通过改动进程配置文件
config/process.php
,比如请求http接口获取要启动的业务进程,合并数组后return即可。【遥控器】webman项目的根目录,单独新建一个脚本文件,启动一个worker,异步连接到中央服务器等待接收重启指令。
其他自由发挥,比如接收 进程配置,直接改写 上述的进程配置文件,然后给重启指令即可。
另外,所有在composer.json文件的 autoload.files 加载的文件,都会优先载入并运行;
意思就是,所有 autoload.files 文件加载运行后,才轮到 webman的start.php
感谢大佬回复,不过有两个小问题,1是composer.json文件的 autoload.files 加载的文件是可以等待HTTP阻塞调用并返回数据后再去运行webman的start.php吧?2是【遥控器】中,启动的这个worker好像是子进程,子进程不能调用restart去重启父进程。。
注意看题目,遥控器】webman项目的根目录,单独新建一个脚本文件,启动一个worker;这个是独立的两个进程(master进程、worker进程),当然可以调用webman的 start.php
回复:1是composer.json文件的 autoload.files 加载的文件是可以等待HTTP阻塞调用并返回数据后再去运行webman的start.php吧
答案:是的
【遥控器】webman项目的根目录,单独新建一个脚本文件,启动一个worker;这个脚本是单独启动的,与webman 没有亲缘关系。