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); }
<?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); });