/** * 获得socket的上下文选项 * @param string $worker_name * @return resource */ protected static function getSocketContext($worker_name) { $context = null; // 根据手册5.3.3之前版本stream_socket_server 不支持 backlog 选项 if (version_compare(PHP_VERSION, '5.3.3') < 0) { return $context; } // 读取worker的backlog $backlog = (int) Lib\Config::get($worker_name . '.backlog'); // 没有设置或者不合法则尝试使用workerman.conf中的backlog设置 if ($backlog <= 0) { $backlog = (int) Lib\Config::get('workerman.backlog'); } // 都没设置backlog,使用默认值 if ($backlog <= 0) { $backlog = self::DEFAULT_BACKLOG; } // backlog选项 $opts = array('socket' => array('backlog' => $backlog)); // 返回上下文 $context = stream_context_create($opts); return $context; }
/** * 记录日志 * @param sring $str * @return void */ protected function notice($str, $display = true) { $str = 'Worker[' . get_class($this) . ']:' . $str; Lib\Log::add($str); if ($display && Lib\Config::get('workerman.debug') == 1) { echo $str . "\n"; } }
/** * 关闭标准输入输出 * @return void */ protected static function resetStdFd($force = false) { // 如果此进程配置是no_debug,则关闭输出 if (!$force) { // 开发环境不关闭标准输出,用于调试 if (Lib\Config::get('workerman.debug') == 1 && posix_ttyname(STDOUT)) { return; } } global $STDOUT, $STDERR; @fclose(STDOUT); @fclose(STDERR); // 将标准输出重定向到/dev/null $STDOUT = fopen('/dev/null', "rw+"); $STDERR = fopen('/dev/null', "rw+"); }