db_pool.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. $serv = new swoole_http_server("127.0.0.1", 9500);
  3. $serv->set(array(
  4. 'worker_num' => 100,
  5. 'task_worker_num' => 20, //database connection pool
  6. 'db_uri' => 'mysql:host=127.0.0.1;dbname=test',
  7. 'db_user' => 'root',
  8. 'db_passwd' => 'root',
  9. ));
  10. function my_onRequest_sync($req, $resp)
  11. {
  12. global $serv;
  13. $result = $serv->taskwait("show tables");
  14. if ($result !== false)
  15. {
  16. $resp->end(var_export($result['data'], true));
  17. return;
  18. }
  19. else
  20. {
  21. $resp->status(500);
  22. $resp->end("Server Error, Timeout\n");
  23. }
  24. }
  25. function my_onTask($serv, $task_id, $reactor_id, $sql)
  26. {
  27. static $link = null;
  28. if ($link == null)
  29. {
  30. $link = new PDO($serv->setting['db_uri'], $serv->setting['db_user'], $serv->setting['db_passwd']);;
  31. if (!$link)
  32. {
  33. $link = null;
  34. return array("data" => '', 'error' => "connect database failed.");
  35. }
  36. }
  37. $result = $link->query($sql);
  38. if (!$result)
  39. {
  40. return array("data" => '', 'error' => "query error");
  41. }
  42. $data = $result->fetchAll();
  43. return array("data" => $data);
  44. }
  45. function my_onFinish($serv, $data)
  46. {
  47. echo "AsyncTask Finish:Connect.PID=" . posix_getpid() . PHP_EOL;
  48. }
  49. $serv->on('Request', 'my_onRequest_sync');
  50. $serv->on('Task', 'my_onTask');
  51. $serv->on('Finish', 'my_onFinish');
  52. $serv->start();