public static function resetStd()
{
if (!static::$daemonize || static::$_OS !== 'linux') {
return;
}
global $STDOUT, $STDERR;
$handle = fopen(static::$stdoutFile, "a");
if ($handle) {
unset($handle);
//关闭标准输出和标准错误
@fclose(STDOUT);
@fclose(STDERR);
//a 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
//把标准输出和错误 定位到 /dev/null
$STDOUT = fopen(static::$stdoutFile, "a");
$STDERR = fopen(static::$stdoutFile, "a");
} else {
throw new Exception('can not open stdoutFile ' . static::$stdoutFile);
}
}
不是太理解这段操作的意义在于什么?
https://stackoverflow.com/questions/6472102/redirecting-i-o-in-php
大概懂了
意思是把标准错误流 (stdout) 、标准错误流(stderr)重定向到设备/dev/null上。
/dev/null 是类Unix系统中的一个特殊文件设备,他的作用是接受一切输入它的数据并丢弃这些数据。通常被当做垃圾桶来用。
将输出流重定向到它上面,就是丢弃这个输出流上的所有输出。
要点在于“重新打开”标准输出设备,可能的应用场景是 log rotate。
至于是不是 /dev/null,并不取决于这段代码,而是看 $stdoutFile 的设置。(不要看那句注释,那是误导)
恩,我的理解是,有利于后台运行脚本直接输出并被记录到相关的文件中,跟踪程序。这样理解没问题把?
还有一点,不太理解的是,定义的onMessage 为什么会执行2次,这是个什么原理?
操作就是: 开启workerman服务后,刷新浏览器。
具体代码:
浏览器会请求 favicon.ico
好吧,我忽略了这点,大神谢谢你的回复。