server_hot_update_opcache.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. $serv = new swoole_server("127.0.0.1", 9501);
  3. $serv->set(array(
  4. 'worker_num' => 2,
  5. //'open_eof_check' => true,
  6. //'package_eof' => "\r\n",
  7. 'task_worker_num' => 2,
  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_onTimer($serv, $interval)
  24. {
  25. echo "Server:Timer Call.Interval=$interval\n";
  26. }
  27. function my_onClose($serv, $fd, $reactor_id)
  28. {
  29. //echo "Client: fd=$fd is closed.\n";
  30. }
  31. function my_onConnect($serv, $fd, $reactor_id)
  32. {
  33. //throw new Exception("hello world");
  34. // echo "Client:Connect.\n";
  35. }
  36. $class = null;
  37. function my_onWorkerStart($serv, $worker_id)
  38. {
  39. global $argv;
  40. global $class;
  41. opcache_reset();
  42. include "hot_update_class.php";
  43. $class = new HotUpdate();
  44. if($worker_id >= $serv->setting['worker_num']) {
  45. swoole_set_process_name("php {$argv[0]} task worker");
  46. } else {
  47. swoole_set_process_name("php {$argv[0]} event worker");
  48. }
  49. //echo "WorkerStart|MasterPid={$serv->master_pid}|Manager_pid={$serv->manager_pid}|WorkerId=$worker_id\n";
  50. //$serv->addtimer(500); //500ms
  51. }
  52. function my_onWorkerStop($serv, $worker_id)
  53. {
  54. echo "WorkerStop[$worker_id]|pid=".posix_getpid().".\n";
  55. }
  56. function my_onReceive(swoole_server $serv, $fd, $reactor_id, $data)
  57. {
  58. $cmd = trim($data);
  59. if($cmd == "reload")
  60. {
  61. $serv->reload($serv);
  62. }
  63. elseif($cmd == "task")
  64. {
  65. $task_id = $serv->task("hello world", 0);
  66. echo "Dispath AsyncTask: id=$task_id\n";
  67. }
  68. elseif($cmd == "info")
  69. {
  70. $info = $serv->connection_info($fd);
  71. $serv->send($fd, 'Info: '.var_export($info, true).PHP_EOL);
  72. }
  73. elseif($cmd == "broadcast")
  74. {
  75. $start_fd = 0;
  76. while(true)
  77. {
  78. $conn_list = $serv->connection_list($start_fd, 10);
  79. if($conn_list === false)
  80. {
  81. break;
  82. }
  83. $start_fd = end($conn_list);
  84. foreach($conn_list as $conn)
  85. {
  86. if($conn === $fd) continue;
  87. $serv->send($conn, "hello from $fd\n");
  88. }
  89. }
  90. }
  91. //这里故意调用一个不存在的函数
  92. elseif($cmd == "error")
  93. {
  94. hello_no_exists();
  95. }
  96. elseif($cmd == "shutdown")
  97. {
  98. $serv->shutdown();
  99. }
  100. else
  101. {
  102. global $class;
  103. $data .= $class->getData();
  104. $serv->send($fd, 'Swoole: '.$data, $reactor_id);
  105. //$serv->close($fd);
  106. }
  107. //echo "Client:Data. fd=$fd|reactor_id=$reactor_id|data=$data";
  108. //$serv->deltimer(800);
  109. //swoole_server_send($serv, $other_fd, "Server: $data", $other_reactor_id);
  110. }
  111. function my_onTask(swoole_server $serv, $task_id, $reactor_id, $data)
  112. {
  113. echo "AsyncTask[PID=".posix_getpid()."]: task_id=$task_id.".PHP_EOL;
  114. $serv->finish("OK");
  115. }
  116. function my_onFinish(swoole_server $serv, $data)
  117. {
  118. echo "AsyncTask Finish:Connect.PID=".posix_getpid().PHP_EOL;
  119. }
  120. $serv->on('Start', 'my_onStart');
  121. $serv->on('Connect', 'my_onConnect');
  122. $serv->on('Receive', 'my_onReceive');
  123. $serv->on('Close', 'my_onClose');
  124. $serv->on('Shutdown', 'my_onShutdown');
  125. $serv->on('Timer', 'my_onTimer');
  126. $serv->on('WorkerStart', 'my_onWorkerStart');
  127. $serv->on('WorkerStop', 'my_onWorkerStop');
  128. $serv->on('Task', 'my_onTask');
  129. $serv->on('Finish', 'my_onFinish');
  130. $serv->on('WorkerError', function($serv, $worker_id, $worker_pid, $exit_code) {
  131. echo "worker abnormal exit. WorkerId=$worker_id|Pid=$worker_pid|ExitCode=$exit_code\n";
  132. });
  133. $serv->start();