swoole-server-noasync.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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->header('Server', 'openswoole');
  27. $res->end(json_encode(['message' => 'Hello, World!']));
  28. break;
  29. case '/plaintext':
  30. $res->header('Content-Type', 'text/plain; charset=utf-8');
  31. $res->header('Server', 'openswoole');
  32. $res->end('Hello, World!');
  33. break;
  34. case '/db':
  35. $res->header('Content-Type', 'application/json');
  36. $res->header('Server', 'openswoole');
  37. $res->end(db());
  38. break;
  39. case '/query':
  40. $res->header('Content-Type', 'application/json');
  41. $res->header('Server', 'openswoole');
  42. $res->end(query((int) $req->get['q'] ?? 1));
  43. break;
  44. case '/fortunes':
  45. $res->header('Content-Type', 'text/html; charset=utf-8');
  46. $res->header('Server', 'openswoole');
  47. $res->end(fortunes());
  48. break;
  49. case '/updates':
  50. $res->header('Content-Type', 'application/json');
  51. $res->header('Server', 'openswoole');
  52. $res->end(updates((int) $req->get['q'] ?? 1));
  53. break;
  54. default:
  55. $res->status(404);
  56. $res->end('Not Found.');
  57. }
  58. } catch (\Throwable $e) {
  59. $res->status(500);
  60. $res->end('code ' . $e->getCode(). 'msg: '. $e->getMessage());
  61. }
  62. });
  63. $server->start();