swoole-server-noasync.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. require_once __DIR__.'/db-no-async.php';
  3. use Swoole\Http\Request;
  4. use Swoole\Http\Response;
  5. $server = new swoole_http_server('0.0.0.0', 8080, SWOOLE_BASE);
  6. $server->set([
  7. 'worker_num' => swoole_cpu_num() * 4,
  8. 'log_file' => '/dev/null',
  9. 'log_level' => 5,
  10. 'open_tcp_nodelay' => true,
  11. ]);
  12. /**
  13. * On start of the PHP worker. One worker per server process is started.
  14. */
  15. $server->on('workerStart', function () {
  16. Db::init();
  17. });
  18. /**
  19. * On every request to the (web)server, execute the following code
  20. */
  21. $server->on('request', static function (Request $req, Response $res) {
  22. try {
  23. switch ($req->server['request_uri']) {
  24. case '/json':
  25. $res->header('Content-Type', 'application/json');
  26. $res->end(json_encode(['message' => 'Hello, World!']));
  27. break;
  28. case '/plaintext':
  29. $res->header('Content-Type', 'text/plain; charset=utf-8');
  30. $res->end('Hello, World!');
  31. break;
  32. case '/db':
  33. $res->header('Content-Type', 'application/json');
  34. $res->end(db());
  35. break;
  36. case '/query':
  37. $res->header('Content-Type', 'application/json');
  38. $res->end(query((int) $req->get['q'] ?? 1));
  39. break;
  40. case '/fortunes':
  41. $res->header('Content-Type', 'text/html; charset=utf-8');
  42. $res->end(fortunes());
  43. break;
  44. case '/updates':
  45. $res->header('Content-Type', 'application/json');
  46. $res->end(updates((int) $req->get['q'] ?? 1));
  47. break;
  48. default:
  49. $res->status(404);
  50. $res->end('Not Found.');
  51. }
  52. } catch (\Throwable $e) {
  53. $res->status(500);
  54. $res->end('code ' . $e->getCode(). 'msg: '. $e->getMessage());
  55. }
  56. });
  57. $server->start();