multi_port_server.php 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. $serv = new swoole_server("0.0.0.0", 9501);
  3. //这里监听了一个UDP端口用来做内网管理
  4. $port = $serv->addlistener('127.0.0.1', 9502, SWOOLE_SOCK_UDP);
  5. $port->on('packet', function($serv, $data, $client) {
  6. var_dump($data, $client);
  7. $serv->sendto($client['address'], $client['port'], "welcome admin\n");
  8. });
  9. $serv->on('connect', function ($serv, $fd) {
  10. echo "Client:Connect.\n";
  11. });
  12. $serv->on('receive', function (swoole_server $serv, $fd, $reactor_id, $data) {
  13. $info = $serv->connection_info($fd, $reactor_id);
  14. //来自9502的内网管理端口
  15. if($info['server_port'] == 9502) {
  16. $serv->send($fd, "welcome admin\n");
  17. $start_fd = 0;
  18. while(true)
  19. {
  20. $conn_list = $serv->connection_list($start_fd, 10);
  21. if($conn_list === false)
  22. {
  23. break;
  24. }
  25. $start_fd = end($conn_list);
  26. var_dump($conn_list);
  27. foreach($conn_list as $conn)
  28. {
  29. if($conn === $fd) continue;
  30. $serv->send($conn, "hello from $fd\n");
  31. }
  32. }
  33. }
  34. //来自外网
  35. else {
  36. $serv->send($fd, 'Swoole: '.$data);
  37. }
  38. });
  39. $serv->on('close', function ($serv, $fd) {
  40. echo "Client: Close.\n";
  41. });
  42. $serv->start();