/** * 记录日志 * @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"; } }
/** * 获得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; }
* @license http://www.opensource.org/licenses/mit-license.php MIT * @link http://github.com/enygma/usher */ namespace Usher; require_once 'Lib/Loader.php'; ob_start(); try { Lib\Loader::init(); Lib\Console::init(); Lib\Config::load(); } catch (\Exception $e) { Lib\Console\Output::msg('Error on setup: ' . $e->getMessage()); die; } $projectName = Lib\Config::getOption('project.name'); Lib\Console\Output::msg('Executing project "' . $projectName . '"'); // get and execute our tasks try { $app = new Lib\Application(); $app->execute(); } catch (\Exception $e) { Lib\Console\Output::error('Error on build! (' . $e->getMessage() . ')'); } if (Lib\Console::getOption('logFile') !== null) { $output = ob_get_contents(); Lib\Utility\Logger::write($output); } if (Lib\Console::getOption('runQuiet') == true) { ob_end_clean(); }
/** * 关闭标准输入输出 * @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+"); }
/** * 根据配置文件创建Workers * @return void */ protected static function createWorkers() { require_once WORKERMAN_ROOT_DIR . 'Core/ThreadWorker.php'; $workers = Lib\Config::getAllWorkers(); foreach ($workers as $worker_name => $config) { $main_socket = isset(self::$listenedSockets[$worker_name]) ? self::$listenedSockets[$worker_name] : null; $worker_file = \Man\Core\Lib\Config::get($worker_name . '.worker_file'); self::$threads[$worker_name] = new \Pool($config['start_workers'], '\\Man\\Core\\Worker', array($main_socket, $worker_file, $worker_name)); for ($i = 0; $i < $config['start_workers']; $i++) { self::$threads[$worker_name]->submit(new ThreadWorker()); } } }