Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function start(ServerContextInterface $context, RequestHandlerInterface $requestHandler)
 {
     $this->server = new \swoole_http_server($context->getListenAddress(), $context->getListenPort(), \SWOOLE_BASE);
     if (null !== $this->serverOptions) {
         $this->server->set($this->serverOptions->getOptions());
     }
     $this->server->on('request', $this->createRequestHandler($requestHandler));
     $this->server->start();
 }
Exemplo n.º 2
0
 /**
  * @param ContainerInterface $app
  */
 public function __construct(ContainerInterface $app)
 {
     $this->app = $app;
     /**
      * create new swoole object
      */
     $this->server = new \swoole_http_server($this->app['Config']['server.hostname'], $this->app['Config']['server.port'], SWOOLE_PROCESS);
     /**
      * set swoole configuration
      */
     $this->server->setGlobal(HTTP_GLOBAL_ALL);
     $this->server->set($this->app['Config']['server.config']);
 }
Exemplo n.º 3
0
 /**
  *
  * @param string $host        	
  * @param int $port        	
  * @param array $config        	
  */
 public function start()
 {
     $server = new \swoole_http_server($this->host, $this->port);
     $server->set($this->config);
     $server->on('Request', array($this, 'onRequest'));
     $server->start();
 }
Exemplo n.º 4
0
 public function __construct()
 {
     // 创建swoole_http_server对象
     $http = new swoole_http_server("0.0.0.0", 9501);
     // 设置参数
     $http->set(array('worker_num' => 16, 'daemonize' => false, 'max_request' => 10000, 'dispatch_mode' => 1));
     $http->setGlobal(HTTP_GLOBAL_ALL);
     // 绑定WorkerStart
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     // 绑定request
     $http->on('request', function ($request, $response) {
         ob_start();
         try {
             //注入uri
             $_GET['_url'] = $request->server['request_uri'];
             $application = new \Phalcon\Mvc\Application($this->di);
             echo $application->handle()->getContent();
         } catch (Exception $e) {
             echo $e->getMessage();
         }
         $result = ob_get_contents();
         ob_end_clean();
         $response->end($result);
     });
     $http->start();
 }
Exemplo n.º 5
0
 private function createServer()
 {
     $server = new \swoole_http_server($this->host, $this->port);
     $server->on('start', [$this, 'onServerStart']);
     $server->on('shutdown', [$this, 'onServerStop']);
     $server->on('workerStart', [$this, 'onWorkerStart']);
     $server->on('workerStop', [$this, 'onWorkerStop']);
     $server->on('request', [$this, 'onRequest']);
     if (method_exists($this, 'onOpen')) {
         $server->on('open', [$this, 'onOpen']);
     }
     if (method_exists($this, 'onClose')) {
         $server->on('close', [$this, 'onClose']);
     }
     if (method_exists($this, 'onWsHandshake')) {
         $server->on('handshake', [$this, 'onWsHandshake']);
     }
     if (method_exists($this, 'onWsMessage')) {
         $server->on('message', [$this, 'onWsMessage']);
     }
     if (method_exists($this, 'onTask')) {
         $server->on('task', [$this, 'onTask']);
     }
     if (method_exists($this, 'onFinish')) {
         $server->on('finish', [$this, 'onFinish']);
     }
     $server->set($this->swConfig + $this->defaultSwConfig);
     return $server;
 }
Exemplo n.º 6
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 16, 'daemonize' => true, 'max_request' => 10000, 'dispatch_mode' => 1));
     $http->on('Request', array($this, 'onRequest'));
     $http->start();
 }
Exemplo n.º 7
0
 public function start($host, $port)
 {
     $controller = $this->controller;
     $http = new \swoole_http_server($host, $port, SWOOLE_BASE);
     $http->on('request', array($this, 'onRequest'));
     $http->set(['worker_num' => 2]);
     $http->start();
 }
Exemplo n.º 8
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 8059);
     $http->set(array('worker_num' => 1, 'daemonize' => false, 'max_request' => 5000, 'user' => 'apache', 'group' => 'apache'));
     $http->on('Start', array($this, 'onStart'));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('Request', array($this, 'onRequest'));
     $http->start();
 }
Exemplo n.º 9
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 16, 'daemonize' => true, 'max_request' => 10000, 'dispatch_mode' => 1));
     define('APPLICATION_PATH', dirname(dirname(__DIR__)) . "/application");
     $this->application = new Yaf_Application(dirname(APPLICATION_PATH) . "/conf/application.ini");
     $this->application->bootstrap();
     $http->on('Request', array($this, 'onRequest'));
     $http->start();
 }
Exemplo n.º 10
0
 /**
  * 初始化
  */
 private function __construct($ip, $port)
 {
     register_shutdown_function(array($this, 'handleFatal'));
     $http = new \swoole_http_server($ip, $port);
     $http->set(\Config\Server::getWebServerConfig());
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', array($this, 'onRequest'));
     $http->on('start', array($this, 'onStart'));
     $http->start();
 }
Exemplo n.º 11
0
 /**
  * 初始化
  */
 private function __construct()
 {
     register_shutdown_function(array($this, 'handleFatal'));
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 12, 'daemonize' => false, 'max_request' => 128, 'dispatch_mode' => 1, 'log_file' => '/home/bweb/logs/swoole.log', 'open_tcp_nodelay' => true));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', array($this, 'onRequest'));
     $http->on('start', array($this, 'onStart'));
     self::getYii();
     $http->start();
 }
Exemplo n.º 12
0
 function run($_setting = array())
 {
     $default_setting = array('worker_num' => 4);
     $this->pid_file = $_setting['pid_file'];
     $setting = array_merge($default_setting, $_setting);
     $serv = new \swoole_http_server('0.0.0.0', self::PORT, SWOOLE_PROCESS);
     $serv->set($setting);
     $serv->on('Request', array($this, 'onRequest'));
     $this->serv = $serv;
     $this->serv->start();
 }
Exemplo n.º 13
0
 /**
  * 初始化
  */
 private function __construct()
 {
     define('CISWOOLE', TRUE);
     register_shutdown_function(array($this, 'handleFatal'));
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 8, 'daemonize' => false, 'max_request' => 10000, 'dispatch_mode' => 1));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', array($this, 'onRequest'));
     $http->on('start', array($this, 'onStart'));
     $http->start();
 }
Exemplo n.º 14
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 8080);
     $http->set(array('worker_num' => 16, 'max_conn' => 10000, 'max_request' => 5000, 'dispatch_mode' => 1, 'daemonize' => 1, 'log_file' => '/var/log/swoole.log'));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', function ($request, $response) {
         if (isset($request->server)) {
             HttpServer::$server = $request->server;
         } else {
             HttpServer::$server = [];
         }
         if (isset($request->header)) {
             HttpServer::$header = $request->header;
         } else {
             HttpServer::$header = [];
         }
         if (isset($request->get)) {
             HttpServer::$get = $request->get;
         } else {
             HttpServer::$get = [];
         }
         if (isset($request->post)) {
             HttpServer::$post = $request->post;
         } else {
             HttpServer::$post = [];
         }
         // TODO handle img
         ob_start();
         try {
             //var_dump(HttpServer::$server['request_uri']);
             $_SERVER['REQUEST_URI'] = HttpServer::$server['request_uri'];
             //$_SERVER['REMOTE_ADDR'] = HttpServer::$server['request_uri'];
             $yaf_request = new Yaf_Request_Http(HttpServer::$server['request_uri']);
             $this->application->getDispatcher()->dispatch($yaf_request);
             // unset(Yaf_Application::app());
         } catch (\Exception $e) {
             var_dump($e);
         }
         $result = ob_get_contents();
         ob_end_clean();
         // add Header
         $response->header('Content-Type', 'no-cache, must-revalidate');
         $response->header('Content-Type', 'application/json');
         //$response->header('Content-Encoding', 'gzip');
         $response->header('Server', 'verycloud');
         // add cookies
         // set status
         $response->end($result);
     });
     $http->on('WorkerStop', array($this, 'onWorkerStop'));
     $http->start();
 }
Exemplo n.º 15
0
 public function __construct($laravelDir, $options, $kernelClass = '\\App\\Http\\Kernel')
 {
     $this->laravelDir = realpath($laravelDir);
     $this->compiledPath = $this->laravelDir . 'bootstrap/cache/compiled.php';
     if (LOAD_COMPILED_BEFORE_WORKER) {
         $this->loadCompiledAndInitSth();
     }
     $this->swoole_http_server = $server = new \swoole_http_server($options['listen_ip'], $options['listen_port']);
     $this->kernelClass = $kernelClass;
     $server->set($options);
     $server->on('WorkerStart', array($this, 'onWorkerStart'));
     $server->on('request', array($this, 'onRequest'));
     return $this;
 }
Exemplo n.º 16
0
 public function __construct()
 {
     // 创建swoole_http_server对象
     $http = new swoole_http_server("0.0.0.0", 9502);
     // 设置参数
     $http->set(array('worker_num' => 16, 'daemonize' => false, 'max_request' => 100000, 'dispatch_mode' => 1));
     $http->setGlobal(HTTP_GLOBAL_ALL);
     // 绑定WorkerStart
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     // 绑定request
     $http->on('request', array($this, 'onRequest'));
     //开启服务器
     $http->start();
 }
Exemplo n.º 17
0
 /**
  * @param App $app
  * @param array $serverSettings
  */
 public function __construct(App $app, array $serverSettings = [])
 {
     $app->getContainer()['http.server.config'] = $serverSettings;
     $app->getContainer()['swoole.http.server'] = function ($container) {
         $httpServer = new \swoole_http_server($this->host, $this->port);
         $httpServer->set($container['http.server.config']);
         $httpServer->setGlobal(HTTP_GLOBAL_ALL);
         $httpServer->on('request', $container['http.request.handler']);
         return $httpServer;
     };
     $app->getContainer()['http.request.handler'] = function () use($app) {
         return new RequestHandler($app);
     };
     $this->app = $app;
 }
Exemplo n.º 18
0
 public function onInit()
 {
     $host = isset($this->_swoole_cfg['swoole']['swoole_host']) ? $this->_swoole_cfg['swoole']['swoole_host'] : '0.0.0.0';
     $port = isset($this->_swoole_cfg['swoole']['swoole_port']) ? $this->_swoole_cfg['swoole']['swoole_port'] : 80;
     $serv = new swoole_http_server($host, $port);
     /**
      * 这里对swoole进程进行设置
      */
     $serv->set($this->_getSwooleCoreCfg());
     $serv->on('WorkerStart', array($this, 'onWorkerStart'));
     $serv->on('WorkerStop', array($this, 'onWorkerStop'));
     $serv->on('Request', array($this, 'onRequest'));
     $serv->on('Task', array($this, 'onTask'));
     $serv->on('Finish', array($this, 'onFinish'));
     $this->_serv = $serv;
 }
Exemplo n.º 19
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 50, 'daemonize' => true, 'max_request' => 10000, 'dispatch_mode' => 16));
     $http->setGlobal(HTTP_GLOBAL_ALL);
     $http->on('Start', function () {
         if (function_exists('cli_set_process_title')) {
             cli_set_process_title('app_server');
         } else {
             if (function_exists('swoole_set_process_name')) {
                 swoole_set_process_name('app_server');
             }
         }
     });
     $http->on('Request', array($this, 'onRequest'));
     $http->start();
 }
Exemplo n.º 20
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 8, 'daemonize' => false, 'max_request' => 1000, 'dispatch_mode' => 1));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', function ($request, $response) {
         if (isset($request->server)) {
             HttpServer::$server = $request->server;
             foreach ($request->server as $key => $value) {
                 $_SERVER[strtoupper($key)] = $value;
             }
         }
         if (isset($request->header)) {
             HttpServer::$header = $request->header;
         }
         if (isset($request->get)) {
             HttpServer::$get = $request->get;
             foreach ($request->get as $key => $value) {
                 $_GET[$key] = $value;
             }
         }
         if (isset($request->post)) {
             HttpServer::$post = $request->post;
             foreach ($request->post as $key => $value) {
                 $_POST[$key] = $value;
             }
         }
         if (isset($request->request_uri)) {
             $_SERVER['REQUEST_URI'] = $request->request_uri;
         }
         ob_start();
         //实例化ycf对象
         try {
             Ycf\Core\YcfCore::run();
         } catch (Exception $e) {
             var_dump($e);
         }
         $result = ob_get_contents();
         ob_end_clean();
         $response->end($result);
         unset($result);
     });
     $http->start();
 }
Exemplo n.º 21
0
 public function __construct()
 {
     $http = new swoole_http_server("127.0.0.1", 9501);
     $http->set(array('worker_num' => 16, 'daemonize' => true, 'max_request' => 10000, 'dispatch_mode' => 1));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', function ($request, $response) {
         if (isset($request->server)) {
             HttpServer::$server = $request->server;
         } else {
             HttpServer::$server = [];
         }
         if (isset($request->header)) {
             HttpServer::$header = $request->header;
         } else {
             HttpServer::$header = [];
         }
         if (isset($request->get)) {
             HttpServer::$get = $request->get;
         } else {
             HttpServer::$get = [];
         }
         if (isset($request->post)) {
             HttpServer::$post = $request->post;
         } else {
             HttpServer::$post = [];
         }
         // TODO handle img
         ob_start();
         try {
             $yaf_request = new Yaf\Request_Http(HttpServer::$server['request_uri']);
             $this->application->getDispatcher()->dispatch($yaf_request);
             // unset(Yaf_Application::app());
         } catch (Yaf_Exception $e) {
             var_dump($e);
         }
         $result = ob_get_contents();
         ob_end_clean();
         // add Header
         // add cookies
         // set status
         $response->end($result);
     });
     $http->start();
 }
Exemplo n.º 22
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 10, 'daemonize' => false, 'max_request' => 10000, 'dispatch_mode' => 1));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', function ($request, $response) {
         if (isset($request->server)) {
             HttpServer::$server = $request->server;
             foreach ($request->server as $key => $value) {
                 $_SERVER[strtoupper($key)] = $value;
             }
         }
         if (isset($request->header)) {
             HttpServer::$header = $request->header;
         }
         if (isset($request->get)) {
             HttpServer::$get = $request->get;
             foreach ($request->get as $key => $value) {
                 $_GET[$key] = $value;
             }
         }
         if (isset($request->post)) {
             HttpServer::$post = $request->post;
             foreach ($request->post as $key => $value) {
                 $_POST[$key] = $value;
             }
         }
         ob_start();
         //实例化yii对象
         try {
             $this->application = Yii::createWebApplication(FRAMEWORK_CONFIG);
             $this->application->run();
         } catch (Exception $e) {
             var_dump($e);
         }
         $result = ob_get_contents();
         ob_end_clean();
         $response->end($result);
         unset($result);
         unset($this->application);
     });
     $http->start();
 }
Exemplo n.º 23
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 16, 'daemonize' => false, 'max_request' => 10000, 'dispatch_mode' => 1));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', function ($request, $response) {
         if (isset($request->server)) {
             SwooleHttpServer::$server = $request->server;
             foreach ($request->server as $key => $value) {
                 $_SERVER[strtoupper($key)] = $value;
             }
         }
         if (isset($request->header)) {
             SwooleHttpServer::$header = $request->header;
         }
         if (isset($request->get)) {
             SwooleHttpServer::$get = $request->get;
             foreach ($request->get as $key => $value) {
                 $_GET[$key] = $value;
             }
         }
         if (isset($request->post)) {
             SwooleHttpServer::$post = $request->post;
             foreach ($request->post as $key => $value) {
                 $_POST[$key] = $value;
             }
         }
         /*
         			$uri = explode( "?", $_SERVER['REQUEST_URI'] );
         			$_SERVER["PATH_INFO"] = $uri[0];
         			if (isset($uri[1])) {
         				$_SERVER['QUERY_STRING'] = $uri[1];
         			}*/
         $_SERVER['argv'][1] = $_SERVER["PATH_INFO"];
         ob_start();
         require_once '../../../ThinkPHP/ThinkPHP.php';
         $result = ob_get_contents();
         ob_end_clean();
         $response->end($result);
     });
     $http->start();
 }
Exemplo n.º 24
0
 public function run()
 {
     if (isset($this->on['workerstart'])) {
         $this->workerstart = $this->on['workerstart'];
     }
     $serv = new swoole_http_server(SWOOLE_HOST, SWOOLE_PORT);
     $serv->set($this->set);
     $this->on['start'] = array($this, 'onStart');
     //避免onStart被重写
     $this->on['request'] = array($this, 'onRequest');
     //避免Request被重写
     $this->on['shutdown'] = array($this, 'onShutdown');
     //避免Shutdown被重写
     $this->on['workerstart'] = array($this, 'onWorkerStart');
     //避免Workerstart被重写
     foreach ($this->on as $k => $v) {
         $serv->on($k, $v);
     }
     $serv->start();
 }
Exemplo n.º 25
0
 public function __construct()
 {
     $http = new swoole_http_server('0.0.0.0', 9502);
     $http->set(array('worker_num' => 4, 'daemonize' => 0, 'dispatch_mode' => 1));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', function ($request, $response) {
         if (isset($request->server)) {
             HttpServer::$server = $request->server;
         } else {
             HttpServer::$server = [];
         }
         if (isset($request->header)) {
             HttpServer::$header = $request->header;
         } else {
             HttpServer::$header = [];
         }
         if (isset($request->get)) {
             HttpServer::$get = $request->get;
         } else {
             HttpServer::$get = [];
         }
         if (isset($request->post)) {
             HttpServer::$post = $request->post;
         } else {
             HttpServer::$post = [];
         }
         ob_start();
         try {
             $yaf_request = new Yaf_Request_Http(HttpServer::$server['request_uri']);
             $this->application->getDispatcher()->dispatch($yaf_request);
         } catch (Yaf_Exception $e) {
             var_dump($e);
         }
         $result = ob_get_contents();
         ob_end_clean();
         $response->end($result);
     });
     $http->start();
 }
Exemplo n.º 26
0
<?php

function mylog($msg, $filename = 'hook_error')
{
    error_log(date("Y-m-d H:i:s") . "\t" . $msg . PHP_EOL, 3, __DIR__ . DIRECTORY_SEPARATOR . $filename . '.mylog');
}
define('PASSWORD', '');
$config = null;
$http = new swoole_http_server("0.0.0.0", 9501);
$http->set(['worker_num' => 4, 'daemonize' => 1]);
$http->on('request', function ($request, $response) {
    $response->end('ok');
    if (false !== strpos($request->server['path_info'], 'reload')) {
        global $http;
        $http->reload();
        return;
    }
    if (empty($request->post['hook'])) {
        mylog('hook data empty');
        return;
    }
    $data = json_decode($request->post['hook'], true);
    if (empty($data)) {
        //错误的数据
        mylog('hook no json data');
        return;
    }
    if (PASSWORD && $data['password'] != PASSWORD) {
        //密码不匹配
        mylog('password error');
        return;
Exemplo n.º 27
0
 public function __construct()
 {
     $http = new swoole_http_server("0.0.0.0", 9501);
     $http->set(array('worker_num' => 16, 'daemonize' => 0, 'max_request' => 10000, 'dispatch_mode' => 1));
     $http->on('WorkerStart', array($this, 'onWorkerStart'));
     $http->on('request', function ($request, $response) {
         if (isset($request->server)) {
             foreach ($request->server as $key => $value) {
                 unset($_SERVER[strtoupper($key)]);
                 $_SERVER[strtoupper($key)] = $value;
             }
         }
         if (isset($request->header)) {
             foreach ($request->header as $key => $value) {
                 unset($_SERVER[strtoupper($key)]);
                 $_SERVER[strtoupper($key)] = $value;
             }
         }
         unset($_GET);
         if (isset($request->get)) {
             foreach ($request->get as $key => $value) {
                 $_GET[$key] = $value;
             }
         }
         unset($_POST);
         if (isset($request->post)) {
             foreach ($request->post as $key => $value) {
                 $_POST[$key] = $value;
             }
         }
         unset($_COOKIE);
         if (isset($request->cookie)) {
             foreach ($request->cookie as $key => $value) {
                 $_COOKIE[$key] = $value;
             }
         }
         unset($_FILES);
         if (isset($request->files)) {
             foreach ($request->files as $key => $value) {
                 $_FILES[$key] = $value;
             }
         }
         /*
         			$uri = explode( "?", $_SERVER['REQUEST_URI'] );
         			$_SERVER["PATH_INFO"] = $uri[0];
         			if( isset( $uri[1] ) ) {
         				$_SERVER['QUERY_STRING'] = $uri[1];
         			}*/
         $_SERVER["PATH_INFO"] = explode('/', $_SERVER["PATH_INFO"], 3)[2];
         $_SERVER['argv'][1] = $_SERVER["PATH_INFO"];
         ob_start();
         // 记录加载文件时间
         G('loadTime');
         // 运行应用
         \Think\App::run();
         $result = ob_get_contents();
         ob_end_clean();
         $response->end($result);
     });
     $http->start();
 }
Exemplo n.º 28
0
<?php

$http = new swoole_http_server("127.0.0.1", 9501, SWOOLE_BASE);
$http->set(['worker_num' => 8, 'dispatch_mode' => 3]);
$http->on('request', function ($request, swoole_http_response $response) {
    $response->end("<h1>Hello Swoole.</h1>");
});
$http->start();
Exemplo n.º 29
0
<?php

// 配置
$setting = array('worker_num' => 3, 'max_request' => 3, 'dispatch_mode' => 1);
$serv = new swoole_http_server('127.0.0.1', 9501);
$serv->set($setting);
//全局资源
$resource = 'global';
//测试三条worker进程的全局资源是否存在竞争
$serv->on('WorkerStart', function ($serv, $worker_id) {
    global $resource;
    $resource = 'worker ' . $worker_id;
});
$serv->on('request', function ($request, $response) {
    global $resource;
    $response->end($resource);
});
$serv->start();
Exemplo n.º 30
0
<?php

/**
 * Created by PhpStorm.
 * User: lancelot
 * Date: 16-7-9
 * Time: 下午6:15
 */
$serv = new swoole_http_server("127.0.0.1", 9501);
$serv->set(['worker_num' => 1]);
$serv->on('Start', function () {
    swoole_set_process_name('simple_route_master');
});
$serv->on('ManagerStart', function () {
    swoole_set_process_name('simple_route_manager');
});
$serv->on('WorkerStart', function () {
    swoole_set_process_name('simple_route_worker');
    var_dump(spl_autoload_register(function ($class) {
        $baseClasspath = \str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
        $classpath = __DIR__ . '/' . $baseClasspath;
        if (is_file($classpath)) {
            require "{$classpath}";
            return;
        }
    }));
});
$serv->on('Request', function ($request, $response) {
    $path_info = explode('/', $request->server['path_info']);
    if (isset($path_info[1]) && !empty($path_info[1])) {
        // ctrl