public function __construct() { // 获取swoole版本 $this->swoole_version = swoole_version(); // 获取框架版本 $this->version = SFrame::S_VERSION; }
/** * server start的时候调用 * @param unknown $serv */ public function onStart($serv) { echo "[1A\n[K-----------------------[47;30m SWOOLE [0m-----------------------------\n[0m"; echo 'swoole version:' . swoole_version() . " PHP version:" . PHP_VERSION . "\n"; echo "------------------------[47;30m WORKERS [0m---------------------------\n"; echo "[47;30mMasterPid[0m", str_pad('', self::$_maxMasterPidLength + 2 - strlen('MasterPid')), "[47;30mManagerPid[0m", str_pad('', self::$_maxManagerPidLength + 2 - strlen('ManagerPid')), "[47;30mWorkerId[0m", str_pad('', self::$_maxWorkerIdLength + 2 - strlen('WorkerId')), "[47;30mWorkerPid[0m\n"; }
public function Bootstrap() { //echo '=============================================================' . PHP_EOL; $envAry = []; $colorPrefix = ""; //"\033[31m"; $colorSufix = ""; //"\033[0m"; if (php_sapi_name() !== 'cli') { throw new BootException('App should run in CLI mode.' . PHP_EOL); } $envAry['Running mode'] = 'PHP-CLI'; // 检测PHP环境 if (version_compare(PHP_VERSION, '5.5.9', '<')) { throw new BootException('Require PHP version >= 5.5.9 !' . PHP_EOL); } $envAry['PHP version'] = $colorPrefix . PHP_VERSION . $colorSufix; // 检测Swoole环境 if (version_compare(\swoole_version(), '1.8.1', '<')) { throw new BootException('Require swoole version >= 1.8.1' . PHP_EOL); } $envAry['Swoole version'] = $colorPrefix . \swoole_version() . $colorSufix; // 检测服务名称 if (!\defined('DI_SERVER_NAME')) { throw new BootException('DI_SERVER_NAME should set' . PHP_EOL); } $envAry['Server name'] = $colorPrefix . DI_SERVER_NAME . $colorSufix; //echo '=============================================================' . PHP_EOL; Log::Info(['Environment' => $envAry]); }
public function onStart(\swoole_server $serv) { global $argv; swoole_set_process_name("php {$argv[0]}: master"); echo "[1A\n[K-----------------------[47;30m SWOOLE [0m-----------------------------\n[0m"; echo 'swoole version:' . swoole_version() . " PHP version:" . PHP_VERSION . "\n"; echo "------------------------[47;30m WORKERS [0m---------------------------\n"; echo "[47;30mMasterPid[0m", str_pad('', self::$_maxMasterPidLength + 2 - strlen('MasterPid')), "[47;30mManagerPid[0m", str_pad('', self::$_maxManagerPidLength + 2 - strlen('ManagerPid')), "[47;30mWorkerId[0m", str_pad('', self::$_maxWorkerIdLength + 2 - strlen('WorkerId')), "[47;30mWorkerPid[0m\n"; }
/** * run server */ public function run() { $this->app['Swoole'] = $this->server; echo "server started on http://{$this->app['Config']['server.hostname']}:{$this->app['Config']['server.port']}" . PHP_EOL; echo swoole_version() . PHP_EOL; /** * start swoole http server */ $this->server->start(); }
/** * server start的时候调用 * @param unknown $serv */ public function onStart($serv) { //设置主进程名称 global $argv; swoole_set_process_name("php {$argv[0]}: statistics_web"); //保存进程master_pid文件比较好操作 file_put_contents(BASEDIR . $this->webPidPath, $serv->master_pid); echo "[1A\n[K-----------------------[47;30m SWOOLE [0m-----------------------------\n[0m"; echo 'swoole version:' . swoole_version() . " PHP version:" . PHP_VERSION . "\n"; echo "------------------------[47;30m WORKERS [0m---------------------------\n"; echo "[47;30mMasterPid[0m", str_pad('', self::$_maxMasterPidLength + 2 - strlen('MasterPid')), "[47;30mManagerPid[0m", str_pad('', self::$_maxManagerPidLength + 2 - strlen('ManagerPid')), "[47;30mWorkerId[0m", str_pad('', self::$_maxWorkerIdLength + 2 - strlen('WorkerId')), "[47;30mWorkerPid[0m\n"; }
/** * 处理request对象 * @param req swoole http server 获得的request对象 */ public static function httpReqHandle($req) { $ver = swoole_version(); $method = $ver == '1.7.9' ? $req->server['REQUEST_METHOD'] : $req->server['request_method']; if ($method != 'POST') { return array('r' => self::HTTP_ERROR_METHOD); } $uri = $ver == '1.7.9' ? $req->server['REQUEST_URI'] : $req->server['request_uri']; $appRoute = HttpRoute::getRoute($uri); if (!$appRoute) { return array('r' => self::HTTP_ERROR_URI); } return array('r' => self::HTTP_OK, 'route' => $appRoute, 'request' => array('uri' => $uri, 'get' => $req->get, 'post' => $req->post ? $req->post : $req->rawContent())); }
public function Bootstrap() { echo '=============================================================' . PHP_EOL; if (php_sapi_name() !== 'cli') { throw new BootException('App should run in CLI mode.' . PHP_EOL); } echo 'Is running in PHP-CLI mode.' . PHP_EOL; // 检测PHP环境 if (version_compare(PHP_VERSION, '5.5.9', '<')) { throw new BootException('Require PHP version >= 5.5.9 !' . PHP_EOL); } echo "PHP version is " . PHP_VERSION . PHP_EOL; // 检测Swoole环境 if (version_compare(\swoole_version(), '1.7.20', '<')) { throw new BootException('Require swoole version >= 1.7.20' . PHP_EOL); } echo "Swoole version is " . \swoole_version() . PHP_EOL; // 检测服务名称 if (!\defined('DI_SERVER_NAME')) { throw new BootException('DI_SERVER_NAME should set' . PHP_EOL); } echo "Server name is " . DI_SERVER_NAME . PHP_EOL; echo '=============================================================' . PHP_EOL; }
* 创建一个子进程 * 子进程创建成功后调用函数callback_vmstat */ $process = new swoole_process('callback_vmstat', true); $pid = $process->start(); /** * websocket server配置 */ $server->set(array('worker_num' => 1, 'daemonize' => false, 'max_request' => 1000, 'dispatch_mode' => 1)); /** * websocket server start * 成功后回调 */ $server->on('start', function ($serv) use($_maxMasterPidLength, $_maxManagerPidLength, $_maxWorkerIdLength, $_maxWorkerPidLength) { echo "[1A\n[K-----------------------[47;30m SWOOLE [0m-----------------------------\n[0m"; echo 'swoole version:' . swoole_version() . " PHP version:" . PHP_VERSION . "\n"; echo "------------------------[47;30m WORKERS [0m---------------------------\n"; echo "[47;30mMasterPid[0m", str_pad('', $_maxMasterPidLength + 2 - strlen('MasterPid')), "[47;30mManagerPid[0m", str_pad('', $_maxManagerPidLength + 2 - strlen('ManagerPid')), "[47;30mWorkerId[0m", str_pad('', $_maxWorkerIdLength + 2 - strlen('WorkerId')), "[47;30mWorkerPid[0m", str_pad('', $_maxWorkerPidLength + 2 - strlen('WorkerPid')), "\n"; global $process; //将process->pipe加入到swoole的reactor事件监听中 swoole_event_add($process->pipe, function ($pipe) use($process, $serv) { $str = $process->read(); $conn_list = $serv->connection_list(); if (!empty($conn_list)) { foreach ($conn_list as $fd) { $serv->push($fd, $str); } } }); }); /**
<?php echo SWOOLE_VERSION, "\n"; echo swoole_version();
/** * 构造函数。 * * @param \LeePHP\Bootstrap $ctx */ function __construct($ctx) { parent::__construct($ctx); $this->core_version = swoole_version(); }
/** * 设置回调 */ protected function SetOnServer() { if ($this->server) { $callBack =& $this->callBack; $this->server->on("start", [$callBack, 'OnStart']); $this->server->on("connect", [$callBack, 'OnConnect']); $this->server->on("receive", [$callBack, 'OnReceive']); $this->server->on("close", [$callBack, 'OnClose']); $this->server->on("task", [$callBack, 'OnTask']); $this->server->on('finish', [$callBack, 'OnFinish']); $this->server->on('shutdown', [$callBack, 'OnShutdown']); $this->server->on('WorkerStart', [$callBack, 'OnWorkerStart']); $this->server->on('WorkerStop', [$callBack, 'OnWorkerStop']); $this->server->on('WorkerError', [$callBack, 'OnWorkerError']); $this->server->on('PipeMessage', [$callBack, 'OnPipeMessage']); DILog('Swoole_version is ' . swoole_version(), 'n'); if (version_compare(\swoole_version(), '1.7.17')) { //OnPacket方法与现有的基于Receive的业务逻辑有差异,暂时不支持。 // DILog('OnPacket is activated.'); // $this->server->on('Packet', [$callBack, 'OnPacket']); //1.7.18特性 } } }
/** * server start的时候调用 * @param unknown $serv */ public function onStart($serv) { echo 'swoole version' . swoole_version() . PHP_EOL; }
$status = $failed ? "Failed" : "Success"; $space = str_repeat(' ', self::LINE_N - strlen($msg)); echo "{$msg}{$space}[{$color}m [{$status}][0m\n"; if ($failed and $die) { die; } } } echo "------------------------------------------------------------------\n"; echo "Swoole Unit Tests. Version 1.0.0\n"; echo "Author: Han Tianfeng.\n"; echo "CopyRight: Swoole-Team.\n"; echo "------------------------------------------------------------------\n"; Console::put("extension_loaded('swoole')", !extension_loaded('swoole'), true); Console::put("swoole_get_local_ip()", !is_array(swoole_get_local_ip())); Console::put("swoole_version()", !is_string(swoole_version())); if (!class_exists('swoole_process')) { Console::put("no have swoole_process", true, true); } $server = new swoole_process(function ($process) { $php = $_SERVER['_']; return $process->exec($php, array(__DIR__ . "/../examples/server.php", 'daemon')); }, false, false); if (!$server->start()) { Console::put("Server start failed.", true, true); } usleep(200000); register_shutdown_function(function () { global $server; if (swoole_process::kill($server->pid, SIGTERM)) { Console::put("swoole_process::kill()");
/** * on_start : callback function after started * @param object $server server instance * @param int $workerId worker id * @return string result */ public function on_start($server, $workerId = 0) { // log pids and port log_message('info', __METHOD__ . '(' . $server->master_pid . '/' . $server->manager_pid . ').......@ ' . $this->config->get('server_port', 2048) . '(Ver ' . swoole_version() . ')'); // change user id and group // $user_name = $this->config->get('user_name', '_www'); // if( !self::changeUser($user_name) ){ // log_message('error', 'Failed to change user'); // } // set process name $proc_name = $this->config->get('process_name', 'my_server'); if ($workerId >= $this->config->get('worker_num', 4)) { self::setProcessName('php ' . $proc_name . ': task'); } else { self::setProcessName('php ' . $proc_name . ': worker'); } // fire event $this->fire_event(__FUNCTION__, func_get_args(), false); }
/** * @param string $command * @return string Process result */ protected function processCommand($command) { $server = $this->swoole; switch ($command) { case 'status': $labels = ['start_time' => 'Service started at', 'connection_num' => 'Current connections', 'request_count' => 'Total requests']; $stats = $server->stats(); $result = "Service is running. PID: {$server->master_pid}, port: {$this->swoolePort}"; $result .= "\nSwoole version: " . swoole_version(); foreach ($labels as $k => $label) { $v = $stats[$k]; $k == 'start_time' and $v = date('Y-n-j H:i:s (e)', $v); $result .= "\n{$label}: {$v}"; } $result .= "\nWorkers: {$this->config['worker_num']}"; break; case 'connections': $stats = $server->stats(); $result = $stats['connection_num']; break; // @codeCoverageIgnoreStart // @codeCoverageIgnoreStart default: $result = 'Bad command'; // @codeCoverageIgnoreEnd } return $result; }
$fdefs = getFuncDef($funcs, $version); $class_def = ''; foreach ($consts as $k => $v) { if (!is_numeric($v)) { $v = "'{$v}'"; } $defines .= "define('{$k}',{$v});\n"; } foreach ($classes as $k => $v) { $prop_str = ''; $props = $v->getProperties(); array_walk($props, function ($v, $k) { global $prop_str, $sp4; $modifiers = implode(' ', Reflection::getModifierNames($v->getModifiers())); $prop_str .= "{$sp4}/**\n{$sp4}*@var \$" . $v->name . " " . $v->class . "\n{$sp4}*/\n{$sp4} {$modifiers} \$" . $v->name . ";\n\n"; }); if ($v->getParentClass()) { $k .= ' extends ' . $v->getParentClass()->name; } $modifier = 'class'; if ($v->isInterface()) { $modifier = 'interface'; } $mdefs = getMethodsDef($v->getMethods(), $version); $class_def .= sprintf("/**\n*@since %s\n*/\n%s %s{\n%s%s\n}\n", $version, $modifier, $k, $prop_str, $mdefs); } file_put_contents(OUTPUT_FILE, "<?php\n" . $defines . $fdefs . $class_def); } export_ext('swoole'); echo "swoole version: " . swoole_version() . "\n"; echo "dump success.\n";
public function excute() { $arrData = array('local_ip' => swoole_get_local_ip(), 'version' => swoole_version(), 'setting' => $this->_objDispatcher->getBootstrap()->getServer()->setting, 'stats' => $this->_objDispatcher->getBootstrap()->getServer()->stats()); $response = $this->_objDispatcher->getResponse(); $response->end(json_encode($arrData)); }