swoole-server.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. require __DIR__.'/database.php';
  3. use Swoole\Http\Server;
  4. use Swoole\Http\Request;
  5. use Swoole\Http\Response;
  6. $enableCoroutine = getenv('ENABLE_COROUTINE') == 1;
  7. $connection = $enableCoroutine ? Connections::class : Connection::class;
  8. $setting = [
  9. 'worker_num' => swoole_cpu_num() * ((int) getenv('CPU_MULTIPLES')),
  10. 'log_file' => '/dev/null',
  11. 'enable_coroutine' => $enableCoroutine,
  12. 'enable_reuse_port' => true
  13. ];
  14. if ($enableCoroutine) {
  15. $setting['hook_flags'] = SWOOLE_HOOK_ALL;
  16. }
  17. $server = new Server('0.0.0.0', 8080);
  18. $server->set($setting);
  19. $server->on('workerStart', function () use ($connection) {
  20. $connection::init(getenv('DATABASE_DRIVER'));
  21. });
  22. $server->on('request', function (Request $req, Response $res) use ($connection) {
  23. try {
  24. switch ($req->server['request_uri']) {
  25. case '/plaintext':
  26. $res->header['Content-Type'] = 'text/plain; charset=utf-8';
  27. $res->end('Hello, World!');
  28. break;
  29. case '/json':
  30. $res->header['Content-Type'] = 'application/json';
  31. $res->end(json_encode(['message' => 'Hello, World!']));
  32. break;
  33. case '/db':
  34. $res->header['Content-Type'] = ['application/json'];
  35. $res->end($connection::db());
  36. break;
  37. case '/fortunes':
  38. $res->header['Content-Type'] = 'text/html; charset=utf-8';
  39. $res->end($connection::fortunes());
  40. break;
  41. case '/query':
  42. $queries = isset($req->get['queries']) ? (int) $req->get['queries'] : -1;
  43. $query_count = $queries > 1 ? min($queries, 500) : 1;
  44. $res->header['Content-Type'] = 'application/json';
  45. $res->end($connection::query($query_count));
  46. break;
  47. case '/updates':
  48. $queries = isset($req->get['queries']) ? (int) $req->get['queries'] : -1;
  49. $query_count = $queries > 1 ? min($queries, 500) : 1;
  50. $res->header['Content-Type'] = 'application/json';
  51. $res->end($connection::updates($query_count));
  52. break;
  53. default:
  54. $res->status(404);
  55. $res->end('Error 404');
  56. }
  57. } catch (Throwable) {
  58. $res->status(500);
  59. $res->end('Error 500');
  60. }
  61. });
  62. $server->start();