redis_pool.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. #This script is forked from db_pool.php
  3. #
  4. #u can test like this,
  5. #
  6. #/usr/local/php/bin/php bench.php -n 1000 -c 100 -s tcp://127.0.0.1:9508 -f short_tcp / long_tcp
  7. #
  8. #
  9. define("SERVER_RELOAD", 'U0VSVkVSX1JFTE9BRAo=');
  10. if(!extension_loaded('swoole')){
  11. throw new Exception("install swoole extension, pecl install swoole");
  12. }
  13. if(!extension_loaded('redis')) {
  14. throw new Exception("install redis extension, pecl install redis");
  15. }
  16. $serv = new swoole_server("0.0.0.0", 9508);
  17. $serv->set(array(
  18. 'worker_num' => 4,//base on you cpu nums
  19. 'task_worker_num' => 4,//better equal to worker_num, anyway you can define your own
  20. 'heartbeat_check_interval' => 5,
  21. 'heartbeat_idle_time' => 5,
  22. 'open_cpu_affinity' => 1,
  23. 'open_eof_check' => 1,
  24. 'package_eof' => "\r\n\r\n",
  25. 'package_max_length' => 1024 * 16,
  26. //'daemonize' => 1
  27. ));
  28. function onStart($serv) {
  29. echo "MasterPid={$serv->master_pid}|Manager_pid={$serv->manager_pid}\n";
  30. echo "Server: start.Swoole version is [".SWOOLE_VERSION."]\n";
  31. }
  32. function onReceive($serv, $fd, $reactor_id, $key)
  33. {
  34. $key = trim($key);
  35. if($key === SERVER_RELOAD) { // check if this is a reload cmd
  36. $ret = $serv->reload($serv);
  37. ($ret === true) ? $serv->send($fd, "reload success\n") : $serv->send($fd, "reload fail\n");
  38. }else {
  39. $result = $serv->taskwait($key);
  40. if ($result !== false) {
  41. list($status, $data) = explode(':', $result, 2);
  42. if ($status == 'OK') {
  43. $serv->send($fd, $key . " : " . var_export(unserialize($data), true) . "\n");
  44. } else {
  45. $serv->send($fd, $data);
  46. }
  47. return;
  48. } else {
  49. $serv->send($fd, "Error. Task timeout\n");
  50. }
  51. }
  52. }
  53. function onTask($serv, $task_id, $reactor_id, $key)
  54. {
  55. static $redis = null;
  56. if ($redis == null) {
  57. $redis = new Redis();
  58. $redis->pconnect("127.0.0.1", 6379);
  59. if (!$redis) {
  60. $redis = null;
  61. $serv->finish("ER: Init Redis Fail.");
  62. return;
  63. }
  64. }
  65. $data = $redis->get($key);
  66. if ($data === false) {
  67. $serv->finish("ER: Get Data Fail.");
  68. return;
  69. }
  70. $serv->finish("OK:" . serialize($data));
  71. }
  72. function onFinish($serv, $data)
  73. {
  74. echo "AsyncTask Finish:Connect.PID=" . posix_getpid() . PHP_EOL;
  75. }
  76. $serv->on('Start', 'onStart');
  77. $serv->on('Receive', 'onReceive');
  78. $serv->on('Task', 'onTask');
  79. $serv->on('Finish', 'onFinish');
  80. $serv->start();