Example #1
0
function __get_swoole_app(array $config)
{
    $app = new \Owl\Swoole\Application($config['server']['ip'], $config['server']['port']);
    if (isset($config['swoole_setting']) && $config['swoole_setting']) {
        $app->getSwooleServer()->set($config['swoole_setting']);
    }
    $server = $app->getSwooleServer();
    $server->on('start', function () use($config) {
        $pid = posix_getpid();
        if (isset($config['server']['pid_file'])) {
            file_put_contents($config['server']['pid_file'], $pid);
        }
        echo sprintf("Server PID: %d\n", $pid);
        echo sprintf("Listening http://%s:%d/ ...\n", $config['server']['ip'], $config['server']['port']);
    });
    $server->on('shutdown', function () use($config) {
        if (isset($config['server']['pid_file']) && file_exists($config['server']['pid_file'])) {
            unlink($config['server']['pid_file']);
        }
    });
    // 在workstart之后再bootstrap,就可以通过server reload重置应用配置
    $server->on('workerstart', function () {
        __bootstrap();
    });
    return __ini_app($app);
}
Example #2
0
<?php

require __DIR__ . '/../src/autoload.php';
$ip = '127.0.0.1';
$port = 12345;
$app = new \Owl\Swoole\Application($ip, $port);
$app->middleware(function ($request, $response) {
    $start = microtime(true);
    (yield true);
    $use_time = (microtime(true) - $start) * 1000;
    $response->setHeader('use-time', (int) $use_time . 'ms');
});
$app->middleware(function ($request, $response) {
    if ($request->getRequestPath() === '/') {
        $response->setBody('hello world!');
    } else {
        throw \Owl\Http\Exception::factory(404);
    }
    (yield true);
});
$app->setExceptionHandler(function ($exception, $request, $response) {
    if ($exception instanceof \Owl\Http\Exception) {
        $status = $exception->getCode();
        $message = $exception->getMessage();
    } else {
        $status = 500;
        $message = \Owl\Http::getStatusMessage(500);
    }
    $response->setStatus($status);
    $response->setBody($message);
});