连接迭代器

1.10.0或更高版本,提供了监听端口迭代器,可以只遍历当前服务器端口所维持的TCP连接,而不是遍历所有端口的连接。

连接迭代器依赖pcre

4.1.0以上版本移除了pcre依赖

  1. $server = new swoole_websocket_server("0.0.0.0", 9514, SWOOLE_BASE);
  2. $server->set([
  3. 'enable_static_handler' => true,
  4. 'document_root' => __DIR__ . '/web',
  5. ]);
  6. $tcp = $server->listen("0.0.0.0", 9515, SWOOLE_SOCK_TCP);
  7. $tcp->set([
  8. 'open_length_check' => true,
  9. 'package_max_length' => 2 * 1024 * 1024,
  10. 'package_length_type' => 'N',
  11. 'package_body_offset' => 16,
  12. 'package_length_offset' => 0,
  13. ]);
  14. $server->on("open", function ($serv, $req) {
  15. echo "new WebSocket Client, fd={$req->fd}\n";
  16. });
  17. $tcp->on('receive', function ($server, $fd, $reactor_id, $data) {
  18. $body = substr($data, 16);
  19. $value = swoole_serialize::unpack($body);
  20. //仅遍历 9514 端口的连接
  21. $websocket = $server->ports[0];
  22. foreach ($websocket->connections as $_fd)
  23. {
  24. if ($server->exist($_fd))
  25. {
  26. $server->push($_fd, json_encode($value));
  27. }
  28. }
  29. });
  30. $server->start();