uid_dispatch.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. $serv = new swoole_server("0.0.0.0", 9501);
  3. $serv->fdlist = [];
  4. $serv->set(array(
  5. //'tcp_defer_accept' => 5,
  6. //'ipc_mode' => 2,
  7. 'worker_num' => 4,
  8. //'task_worker_num' => 2,
  9. 'dispatch_mode' => 5, //uid dispatch
  10. //'max_request' => 1000,
  11. //'daemonize' => true,
  12. //'log_file' => '/tmp/swoole.log'
  13. ));
  14. $serv->on('timer', function($serv, $interval) {
  15. echo "onTimer: $interval\n";
  16. });
  17. $serv->on('start', function($serv) {
  18. //$serv->addtimer(1000);
  19. });
  20. $serv->on('workerStart', function($serv, $worker_id) {
  21. echo "{$worker_id} start".PHP_EOL;
  22. //if($worker_id == 0) $serv->addtimer(1000);
  23. });
  24. $serv->on('connect', function ($serv, $fd, $reactor_id){
  25. //echo "[#".posix_getpid()."]\tClient@[$fd:$reactor_id]: Connect.\n";
  26. echo "{$fd} connect, worker:".$serv->worker_id.PHP_EOL;
  27. });
  28. $serv->on('task', function ($serv, $task_id, $reactor_id, $data){
  29. });
  30. $serv->on('finish', function ($serv, $fd, $reactor_id){
  31. });
  32. $serv->on('receive', function (swoole_server $serv, $fd, $reactor_id, $data) {
  33. $conn = $serv->connection_info($fd);
  34. print_r($conn);
  35. echo "worker_id: " . $serv->worker_id . PHP_EOL;
  36. if (empty($conn['uid'])) {
  37. $uid = $fd + 1;
  38. if ($serv->bind($fd, $uid)) {
  39. $serv->send($fd, "bind {$uid} success");
  40. }
  41. } else {
  42. if (empty($serv->fdlist[$fd])) {
  43. $serv->fdlist[$fd] = $conn['uid'];
  44. }
  45. print_r($serv->fdlist);
  46. foreach ($serv->fdlist as $_fd => $uid) {
  47. $serv->send($_fd, "{$fd} say:" . $data . PHP_EOL);
  48. }
  49. }
  50. });
  51. $serv->on('close', function ($serv, $fd, $reactor_id) {
  52. //echo "[#".posix_getpid()."]\tClient@[$fd:$reactor_id]: Close.\n";
  53. unset($serv->fdlist[$fd]);
  54. });
  55. $serv->start();