swoole-server-noasync.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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()
  8. ]);
  9. /**
  10. * On start of the PHP worker. One worker per server process is started.
  11. */
  12. $server->on('workerStart', function () {
  13. global $pdo;
  14. $pdo = new PDO("mysql:host=tfb-database;dbname=hello_world", "benchmarkdbuser", "benchmarkdbpass", [
  15. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
  16. ]);
  17. });
  18. /**
  19. * On every request to the (web)server, execute the following code
  20. */
  21. $server->on('request', function (Request $req, Response $res) use ($db, $fortunes, $updates) {
  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. if (isset($req->get['queries'])) {
  35. $res->end(db((int) $req->get['queries']));
  36. } else {
  37. $res->end(db(-1));
  38. }
  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['queries'] ?? 1));
  47. break;
  48. }
  49. } catch (\Throwable $e) {
  50. $res->status(500);
  51. $res->end('code ' . $e->getCode(). 'msg: '. $e->getMessage());
  52. }
  53. });
  54. $server->start();