msgqueue.php 916 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. $workers = [];
  3. $worker_num = 2;
  4. for($i = 0; $i < $worker_num; $i++)
  5. {
  6. $process = new swoole_process('callback_function', false, false);
  7. $process->useQueue();
  8. $pid = $process->start();
  9. $workers[$pid] = $process;
  10. //echo "Master: new worker, PID=".$pid."\n";
  11. }
  12. function callback_function(swoole_process $worker)
  13. {
  14. //echo "Worker: start. PID=".$worker->pid."\n";
  15. //recv data from master
  16. while(true)
  17. {
  18. $recv = $worker->pop();
  19. echo "From Master: $recv\n";
  20. }
  21. sleep(2);
  22. $worker->exit(0);
  23. }
  24. while(true)
  25. {
  26. /**
  27. * @var $process swoole_process
  28. */
  29. $pid = array_rand($workers);
  30. $process = $workers[$pid];
  31. $process->push("hello worker[$pid]\n");
  32. sleep(1);
  33. }
  34. for($i = 0; $i < $worker_num; $i++)
  35. {
  36. $ret = swoole_process::wait();
  37. $pid = $ret['pid'];
  38. unset($workers[$pid]);
  39. echo "Worker Exit, PID=".$pid.PHP_EOL;
  40. }