exist.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. class G
  3. {
  4. static $serv;
  5. private static $buffers = array();
  6. /**
  7. * @param $fd
  8. * @return swoole_buffer
  9. */
  10. static function getBuffer($fd, $create = true)
  11. {
  12. if (!isset(self::$buffers[$fd]))
  13. {
  14. if (!$create)
  15. {
  16. return false;
  17. }
  18. self::$buffers[$fd] = new swoole_buffer(1024 * 128);
  19. }
  20. return self::$buffers[$fd];
  21. }
  22. }
  23. $config = array(
  24. //'worker_num' => 4,
  25. //'open_eof_check' => true,
  26. //'package_eof' => "\r\n",
  27. // 'task_ipc_mode' => 2,
  28. 'task_worker_num' => 2,
  29. 'user' => 'www',
  30. 'group' => 'www',
  31. 'chroot' => '/opt/tmp',
  32. //'task_ipc_mode' => 1,
  33. //'dispatch_mode' => 1,
  34. //'log_file' => '/tmp/swoole.log',
  35. 'heartbeat_check_interval' => 300,
  36. 'heartbeat_idle_time' => 300,
  37. // open_cpu_affinity => 1,
  38. //'cpu_affinity_ignore' =>array(0,1)//如果你的网卡2个队列(或者没有多队列那么默认是cpu0来处理中断),并且绑定了core 0和core 1,那么可以通过这个设置避免swoole的线程或者进程绑定到这2个core,防止cpu0,1被耗光而造成的丢包
  39. );
  40. if (isset($argv[1]) and $argv[1] == 'daemon') {
  41. $config['daemonize'] = true;
  42. } else {
  43. $config['daemonize'] = false;
  44. }
  45. //$mode = SWOOLE_BASE;
  46. $mode = SWOOLE_PROCESS;
  47. $serv = new swoole_server("0.0.0.0", 9501, $mode);
  48. $serv->set($config);
  49. /**
  50. * 使用类的静态属性,可以直接访问
  51. */
  52. G::$serv = $serv;
  53. function my_onStart(swoole_server $serv)
  54. {
  55. global $argv;
  56. swoole_set_process_name("php {$argv[0]}: master");
  57. echo "MasterPid={$serv->master_pid}|Manager_pid={$serv->manager_pid}\n";
  58. echo "Server: start.Swoole version is [".SWOOLE_VERSION."]\n";
  59. }
  60. function my_log($msg)
  61. {
  62. echo $msg.PHP_EOL;
  63. }
  64. function my_onShutdown($serv)
  65. {
  66. echo "Server: onShutdown\n";
  67. }
  68. function my_onClose($serv, $fd, $reactor_id)
  69. {
  70. my_log("Worker#{$serv->worker_pid} Client[$fd@$reactor_id]: fd=$fd is closed");
  71. $buffer = G::getBuffer($fd);
  72. if ($buffer)
  73. {
  74. $buffer->clear();
  75. }
  76. if($serv->exist($fd)) {
  77. echo 'FD[' . $fd . '] exist' . PHP_EOL;
  78. } else {
  79. echo 'FD[' . $fd . '] not exist' . PHP_EOL;
  80. }
  81. }
  82. function my_onConnect(swoole_server $serv, $fd, $reactor_id)
  83. {
  84. if($serv->exist($fd)) {
  85. echo 'FD[' . $fd . '] exist' . PHP_EOL;
  86. } else {
  87. echo 'FD[' . $fd . '] not exist' . PHP_EOL;
  88. }
  89. }
  90. function my_onReceive(swoole_server $serv, $fd, $reactor_id, $data)
  91. {
  92. if($serv->exist($fd)) {
  93. echo 'FD[' . $fd . '] exist' . PHP_EOL;
  94. } else {
  95. echo 'FD[' . $fd . '] not exist' . PHP_EOL;
  96. }
  97. $serv->task($data . '-' . $fd);
  98. }
  99. function my_onTask(swoole_server $serv, $task_id, $reactor_id, $data)
  100. {
  101. list($str, $fd) = explode('-', $data);
  102. if($serv->exist($fd)) {
  103. echo 'FD[' . $fd . '] exist' . PHP_EOL ;
  104. } else {
  105. echo 'FD[' . $fd . '] not exist' . PHP_EOL;
  106. }
  107. echo "Task[PID=".$serv->worker_pid."]: task_id=$task_id.".PHP_EOL;
  108. return $data;
  109. }
  110. function my_onFinish(swoole_server $serv, $task_id, $data)
  111. {
  112. list($str, $fd) = explode('-', $data);
  113. $serv->send($fd, 'Send Data To FD[' . $fd . ']');
  114. echo "Task Finish: result=" . $data . ". PID=" . $serv->worker_pid.PHP_EOL;
  115. }
  116. $serv->on('Start', 'my_onStart');
  117. $serv->on('Connect', 'my_onConnect');
  118. $serv->on('Receive', 'my_onReceive');
  119. $serv->on('Close', 'my_onClose');
  120. $serv->on('Shutdown', 'my_onShutdown');
  121. $serv->on('Task', 'my_onTask');
  122. $serv->on('Finish', 'my_onFinish');
  123. $serv->on('ManagerStart', function($serv) {
  124. global $argv;
  125. swoole_set_process_name("php {$argv[0]}: manager");
  126. });
  127. $serv->start();