您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman利用daemonize属性实现代码层控制进程启动方式是否以守护方式启动
发布时间:2021-11-30 23:13:10编辑:雪饮阅读()
daemonize
说明:
static bool Worker::$daemonize
此属性为全局静态属性,表示是否以daemon(守护进程)方式运行。如果启动命令使用了 -d参数,则该属性会自动设置为true。也可以代码中手动设置。
注意:此属性必须在Worker::runAll();运行前设置才有效。
实现脚本start.php:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
Worker::$daemonize = true;
$worker = new Worker('text://0.0.0.0:8484');
$worker->onWorkerStart = function($worker)
{
$worker->onMessage=function($connection, $data){
$connection->send("hi!");
};
echo "Worker start\n";
};
// 运行worker
Worker::runAll();
运行脚本:
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php start
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none text://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Input "php start.php stop" to stop. Start success.
此时再次按回车,就直接可以进行操作命令行,并不阻塞而且此时再开一个telnet来连接也是没有问题的。
[root@localhost workerman]# telnet 127.0.0.1 8484
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hai
hi!
那么如果我们不使用daemonize属性为true的特性:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('text://0.0.0.0:8484');
$worker->onWorkerStart = function($worker)
{
$worker->onMessage=function($connection, $data){
$connection->send("hi!");
};
echo "Worker start\n";
};
// 运行worker
Worker::runAll();
然后再次重新运行:
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php stop
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php start
Workerman[start.php] start in DEBUG mode
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none text://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
Worker start
发现此时无论回车几次都是阻塞状态。
虽然telnet仍旧能连接:
[root@localhost workerman]# telnet 127.0.0.1 8484
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hai
hi!
当然如果用-d参数,则和上面使用了daemonize属性为true时候的效果一样:
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php start -d
Workerman[start.php] start in DAEMON mode
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none text://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Input "php start.php stop" to stop. Start success.
[root@localhost workerman]#
telnet也能连接:
[root@localhost workerman]# telnet 127.0.0.1 8484
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hai
hi!
我们可以发现不使用daemonize属性为true时候,这带-d参数和不带-d参数时候启动时分别有显示不同的模式,而上面那个有使用daemonize为true时候就没有这个显示:
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php start
Workerman[start.php] start in DEBUG mode
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none text://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
Worker start
^CWorkerman[start.php] stopping ...
Workerman[start.php] has been stopped
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php start -d
Workerman[start.php] start in DAEMON mode
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none text://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Input "php start.php stop" to stop. Start success.
这里分别是debug模式和daemon模式。
我们假如用linux自带的那种命令后台符号&来执行这种没有使用daemonize属性为true的特例时候:
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php start &
[1] 15178
[root@localhost workerman]# Workerman[start.php] start in DEBUG mode
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none text://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
Worker start
可以发现虽然像是和-d或者使用了daemonize使用的效果有点相同(尤指接下来的命令行操作不阻塞),那么可以看到这里其实有区别的,有显示是以debug模式运行的,而-d显示的是daemon模式,而使用了daemonize时候则是不显示模式的。
当然同样telnet能连接:
[root@localhost workerman]# telnet 127.0.0.1 8484
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hai
hi!
那么如果我再次恢复使用daemonize为true的实例:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
Worker::$daemonize = true;
$worker = new Worker('text://0.0.0.0:8484');
$worker->onWorkerStart = function($worker)
{
$worker->onMessage=function($connection, $data){
$connection->send("hi!");
};
echo "Worker start\n";
};
// 运行worker
Worker::runAll();
那么这次我们以linux自带后台符号&来运行:
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php start &
[1] 16446
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none text://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Input "php start.php stop" to stop. Start success.
[1]+ Done php -c /usr/local/php734/lib/php/php.ini start.php start
可以看到,这里虽然用了linux自带的&后台符号,但是模式仍旧不显示,也就是说使用了daemonize为true,则以daemonize为true为优先判断。
当然此时telnet也照样没有问题的:
[root@localhost workerman]# telnet 127.0.0.1 8484
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hai
hi!
那么最后一个就是daemonize为true与-d参数的结合了:
[root@localhost workerman]# php -c /usr/local/php734/lib/php/php.ini start.php start -d
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none text://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Input "php start.php stop" to stop. Start success.
[root@localhost workerman]#
telnet一如既往能连接:
[root@localhost workerman]# telnet 127.0.0.1 8484
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
暂时就先不纠结太多了,能想到的可能基本都列举出来了,如有不足,欢迎指教。
关键字词:workerman,daemonize,启动方式,守护
上一篇:workerman利用reloadable属性实现新增业务代码载入并保持已有客户端连接
下一篇:workerman利用Timer库的persistent属性实现仅定时执行一次的任务及timer数组形式回调及回调参数
相关文章
- workerman利用reloadable属性实现新增业务代码载入并
- workerman属性stdoutFile(输出重定向)及daemonize实现脚
- workerman利用属性user实现指定用户运行进程
- workerman利用属性pidFile自定义进程pid文件
- workerman利用属性connections遍历向客户端定时发消息
- workerman利用logFile属性指定自身运行日志存储路径(不
- workerman端口复用reusePort属性实现同一个入口监听多
- workerman端口复用reusePort属性
- workerman只在指定进程运行的定时器
- workerman属性-protocol(基于tcp实现http)