예제 #1
0
 public function __construct()
 {
     // 获取swoole版本
     $this->swoole_version = swoole_version();
     // 获取框架版本
     $this->version = SFrame::S_VERSION;
 }
예제 #2
0
 /**
  * server start的时候调用
  * @param unknown $serv
  */
 public function onStart($serv)
 {
     echo "\n----------------------- SWOOLE -----------------------------\n";
     echo 'swoole version:' . swoole_version() . "          PHP version:" . PHP_VERSION . "\n";
     echo "------------------------ WORKERS ---------------------------\n";
     echo "MasterPid", str_pad('', self::$_maxMasterPidLength + 2 - strlen('MasterPid')), "ManagerPid", str_pad('', self::$_maxManagerPidLength + 2 - strlen('ManagerPid')), "WorkerId", str_pad('', self::$_maxWorkerIdLength + 2 - strlen('WorkerId')), "WorkerPid\n";
 }
예제 #3
0
 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]);
 }
예제 #4
0
 public function onStart(\swoole_server $serv)
 {
     global $argv;
     swoole_set_process_name("php {$argv[0]}: master");
     echo "\n----------------------- SWOOLE -----------------------------\n";
     echo 'swoole version:' . swoole_version() . "          PHP version:" . PHP_VERSION . "\n";
     echo "------------------------ WORKERS ---------------------------\n";
     echo "MasterPid", str_pad('', self::$_maxMasterPidLength + 2 - strlen('MasterPid')), "ManagerPid", str_pad('', self::$_maxManagerPidLength + 2 - strlen('ManagerPid')), "WorkerId", str_pad('', self::$_maxWorkerIdLength + 2 - strlen('WorkerId')), "WorkerPid\n";
 }
예제 #5
0
 /**
  * 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();
 }
예제 #6
0
 /**
  * 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 "\n----------------------- SWOOLE -----------------------------\n";
     echo 'swoole version:' . swoole_version() . "          PHP version:" . PHP_VERSION . "\n";
     echo "------------------------ WORKERS ---------------------------\n";
     echo "MasterPid", str_pad('', self::$_maxMasterPidLength + 2 - strlen('MasterPid')), "ManagerPid", str_pad('', self::$_maxManagerPidLength + 2 - strlen('ManagerPid')), "WorkerId", str_pad('', self::$_maxWorkerIdLength + 2 - strlen('WorkerId')), "WorkerPid\n";
 }
예제 #7
0
 /**
  * 处理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()));
 }
예제 #8
0
 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;
 }
예제 #9
0
 * 创建一个子进程
 * 子进程创建成功后调用函数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 "\n----------------------- SWOOLE -----------------------------\n";
    echo 'swoole version:' . swoole_version() . "          PHP version:" . PHP_VERSION . "\n";
    echo "------------------------ WORKERS ---------------------------\n";
    echo "MasterPid", str_pad('', $_maxMasterPidLength + 2 - strlen('MasterPid')), "ManagerPid", str_pad('', $_maxManagerPidLength + 2 - strlen('ManagerPid')), "WorkerId", str_pad('', $_maxWorkerIdLength + 2 - strlen('WorkerId')), "WorkerPid", 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);
            }
        }
    });
});
/**
예제 #10
0
파일: version.php 프로젝트: guoyu07/NSwoole
<?php

echo SWOOLE_VERSION, "\n";
echo swoole_version();
예제 #11
0
 /**
  * 构造函数。
  * 
  * @param \LeePHP\Bootstrap $ctx
  */
 function __construct($ctx)
 {
     parent::__construct($ctx);
     $this->core_version = swoole_version();
 }
예제 #12
0
 /**
  * 设置回调
  */
 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特性
         }
     }
 }
예제 #13
0
 /**
  * server start的时候调用
  * @param unknown $serv
  */
 public function onStart($serv)
 {
     echo 'swoole version' . swoole_version() . PHP_EOL;
 }
예제 #14
0
        $status = $failed ? "Failed" : "Success";
        $space = str_repeat(' ', self::LINE_N - strlen($msg));
        echo "{$msg}{$space}[{$color}m [{$status}]\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()");
예제 #15
0
 /**
  * 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);
 }
예제 #16
0
 /**
  * @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;
 }
예제 #17
0
파일: dump.php 프로젝트: noikiy/swoole-src
    $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";
예제 #18
0
파일: Stats.php 프로젝트: vucms/aha
 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));
 }