shared_server.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. $serv = new swoole_server("127.0.0.1", 9501);
  3. $serv->set(array(
  4. 'worker_num' => 1,
  5. //'open_eof_check' => true,
  6. //'package_eof' => "\r\n",
  7. 'task_worker_num' => 1,
  8. //'dispatch_mode' => 2,
  9. //'daemonize' => 1,
  10. //'heartbeat_idle_time' => 5,
  11. //'heartbeat_check_interval' => 5,
  12. ));
  13. function my_onStart($serv)
  14. {
  15. echo "MasterPid={$serv->master_pid}|Manager_pid={$serv->manager_pid}\n";
  16. echo "Server: start.Swoole version is [".SWOOLE_VERSION."]\n";
  17. //$serv->addtimer(1000);
  18. }
  19. function my_onShutdown($serv)
  20. {
  21. echo "Server: onShutdown\n";
  22. }
  23. function my_onClose($serv, $fd, $reactor_id)
  24. {
  25. //echo "Client: fd=$fd is closed.\n";
  26. }
  27. function my_onConnect($serv, $fd, $reactor_id)
  28. {
  29. //throw new Exception("hello world");
  30. // echo "Client:Connect.\n";
  31. }
  32. function my_onWorkerStart($serv, $worker_id)
  33. {
  34. global $argv;
  35. if ($worker_id >= $serv->setting['worker_num']) {
  36. swoole_set_process_name("php {$argv[0]} task worker");
  37. } else {
  38. swoole_set_process_name("php {$argv[0]} event worker");
  39. }
  40. //echo "WorkerStart|MasterPid={$serv->master_pid}|Manager_pid={$serv->manager_pid}|WorkerId=$worker_id\n";
  41. //$serv->addtimer(500); //500ms
  42. }
  43. function my_onWorkerStop($serv, $worker_id)
  44. {
  45. echo "WorkerStop[$worker_id]|pid=".posix_getpid().".\n";
  46. }
  47. function my_onReceive(swoole_server $serv, $fd, $reactor_id, $rdata)
  48. {
  49. $data = unserialize($rdata);
  50. if (isset($data['cmd']))
  51. {
  52. switch ($data['cmd'])
  53. {
  54. case 'get':
  55. $s = microtime(true);
  56. $res = $serv->taskwait($data, 0.5, 0);
  57. echo "use " . ((microtime(true) - $s) * 1000) . "ms\n";
  58. $serv->send($fd, PHP_EOL . "get " . $res['key'] . ": " . $res['val']);
  59. break;
  60. case "set":
  61. $serv->task($data, 0);
  62. $serv->send($fd, "OK\n");
  63. break;
  64. case "del":
  65. $serv->task($data, 0);
  66. break;
  67. case "reload":
  68. break;
  69. default:
  70. echo "server:" . $data . PHP_EOL;
  71. }
  72. }
  73. }
  74. function my_onTask(swoole_server $serv, $task_id, $reactor_id, $data)
  75. {
  76. static $datas = array();
  77. if (isset($data['cmd']))
  78. {
  79. switch ($data['cmd']) {
  80. case 'get':
  81. $key = $data['key'];
  82. $val = isset($datas[$key]) ? $datas[$key] : "";
  83. $serv->finish(array('key'=>$key, 'val' => $val));
  84. break;
  85. case "set":
  86. $key = $data['key'];
  87. $val = $data['val']."_".$reactor_id;
  88. $datas[$key] = $val;
  89. return;
  90. break;
  91. case "del":
  92. $key = $data['key'];
  93. if(isset($datas[$key])) {
  94. unset($datas[$key]);
  95. }
  96. break;
  97. case "task":
  98. $key = $data['key'];
  99. echo "Do task " . $key . PHP_EOL;
  100. break;
  101. }
  102. }
  103. echo "AsyncTask[PID=".posix_getpid()."]: task_id=$task_id.".PHP_EOL;
  104. // $serv->finish("OK");
  105. }
  106. function my_onFinish(swoole_server $serv, $task_id, $from_worker_id, $data)
  107. {
  108. echo "AsyncTask Finish: Connect.PID=" . posix_getpid() . PHP_EOL;
  109. }
  110. function my_onWorkerError(swoole_server $serv, $worker_id, $worker_pid, $exit_code)
  111. {
  112. echo "worker abnormal exit. WorkerId=$worker_id|Pid=$worker_pid|ExitCode=$exit_code\n";
  113. }
  114. $serv->on('Start', 'my_onStart');
  115. $serv->on('Connect', 'my_onConnect');
  116. $serv->on('Receive', 'my_onReceive');
  117. $serv->on('Close', 'my_onClose');
  118. $serv->on('Shutdown', 'my_onShutdown');
  119. $serv->on('WorkerStart', 'my_onWorkerStart');
  120. $serv->on('WorkerStop', 'my_onWorkerStop');
  121. $serv->on('Task', 'my_onTask');
  122. $serv->on('Finish', 'my_onFinish');
  123. $serv->on('WorkerError', 'my_onWorkerError');
  124. $serv->start();