swoole-server.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. $server = new swoole_http_server('0.0.0.0', 8080, SWOOLE_BASE);
  3. $server->set(array(
  4. 'worker_num' => NUMCORES
  5. ));
  6. $server->on('request', function ($req, $res) {
  7. switch ($req->server['request_uri'])
  8. {
  9. case "/json":
  10. $res->header('Content-Type', 'application/json');
  11. $res->end(json_encode(array('message' => 'Hello, World!')));
  12. break;
  13. case "/plaintext":
  14. $res->header('Content-Type', 'text/plain; charset=utf-8');
  15. $res->end('Hello, World!');
  16. break;
  17. case "/db":
  18. $db = new Swoole\Coroutine\Mysql;
  19. $server = [
  20. 'host' => co::gethostbyname('tfb-database'),
  21. 'user' => 'benchmarkdbuser',
  22. 'password' => 'benchmarkdbpass',
  23. 'database' => 'hello_world'
  24. ];
  25. $db->connect($server);
  26. // Read number of queries to run from URL parameter
  27. $query_count = 1;
  28. if (isset($req->get['queries']) && $req->get['queries'] > 0)
  29. $query_count = $req->get['queries'] > 500 ? 500 : $req->get['queries'];
  30. // Create an array with the response string.
  31. $arr = array();
  32. // Define query
  33. $stmt = $db->prepare('SELECT randomNumber FROM World WHERE id = ?');
  34. // For each query, store the result set values in the response array
  35. while (0 < $query_count--)
  36. {
  37. $id = mt_rand(1, 10000);
  38. $ret = $stmt->execute(array($id));
  39. // Store result in array.
  40. $arr[] = array('id' => $id, 'randomNumber' => $ret[0]['randomNumber']);
  41. }
  42. // Use the PHP standard JSON encoder.
  43. // http://www.php.net/manual/en/function.json-encode.php
  44. if (count($arr) === 1)
  45. $arr = $arr[0];
  46. $res->header('Content-Type', 'application/json');
  47. $res->end(json_encode($arr));
  48. break;
  49. case "/fortunes":
  50. $db = new Swoole\Coroutine\Mysql;
  51. $server = [
  52. 'host' => co::gethostbyname('tfb-database'),
  53. 'user' => 'benchmarkdbuser',
  54. 'password' => 'benchmarkdbpass',
  55. 'database' => 'hello_world' //;charset=utf8
  56. ];
  57. $db->connect($server);
  58. $fortune = [];
  59. // Define query
  60. $arr = $db->query('SELECT id, message FROM Fortune');
  61. foreach ($arr as $row)
  62. $fortune[$row['id']] = $row['message'];
  63. $fortune[0] = 'Additional fortune added at request time.';
  64. asort($fortune);
  65. $html = "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>";
  66. foreach ($fortune as $id => $message)
  67. $html .= "<tr><td>" . $id . "</td><td>" . htmlspecialchars($message, ENT_QUOTES, 'UTF-8') . "</td></tr>";
  68. $html .= "</table></body></html>";
  69. $res->header('Content-Type', 'text/html; charset=utf-8');
  70. $res->end($html);
  71. break;
  72. case "/updates":
  73. $db = new Swoole\Coroutine\Mysql;
  74. $server = [
  75. 'host' => co::gethostbyname('tfb-database'),
  76. 'user' => 'benchmarkdbuser',
  77. 'password' => 'benchmarkdbpass',
  78. 'database' => 'hello_world'
  79. ];
  80. $db->connect($server);
  81. $query_count = 1;
  82. if (isset($req->get['queries']) && $req->get['queries'] > 0)
  83. $query_count = $req->get['queries'] > 500 ? 500 : $req->get['queries'];
  84. $arr = array();
  85. $statement = $db->prepare('SELECT randomNumber FROM World WHERE id = ?');
  86. $updateStatement = $db->prepare('UPDATE World SET randomNumber = ? WHERE id = ?');
  87. while (0 < $query_count--)
  88. {
  89. $id = mt_rand(1, 10000);
  90. $randomNumber = mt_rand(1, 10000);
  91. $ret = $statement->execute(array($id));
  92. // Store result in array.
  93. $world = array('id' => $id, 'randomNumber' => $ret[0]['randomNumber']);
  94. $world['randomNumber'] = $randomNumber;
  95. $updateStatement->execute(array($randomNumber, $id));
  96. $arr[] = $world;
  97. }
  98. $res->header('Content-Type', 'application/json');
  99. $res->end(json_encode($arr));
  100. break;
  101. }
  102. });
  103. $server->start();