• 常用的Swoole函数


      

    官方文档地址

    getClientInfo()

    获取连接的信息,别名是 SwooleServer->connection_info()

    SwooleServer->getClientInfo(int $fd, int $extraData, bool $ignoreError = false): bool|array
    • 参数

      • int $fd

        • 功能:指定文件描述符
        • 默认值:无
        • 其它值:无
      • int $extraData

        • 功能:扩展信息,保留参数,目前无任何效果
        • 默认值:无
        • 其它值:无
      • bool $ignoreError

        • 功能:是否忽略错误,如果设置为 true,即使连接关闭也会返回连接的信息
        • 默认值:无
        • 其它值:无
    • 提示

      • 客户端证书

        • 仅在 onConnect 触发的进程中才能获取到证书
        • 格式为 x509 格式,可使用 openssl_x509_parse 函数获取到证书信息
      • 当使用 dispatch_mode = 1/3 配置时,考虑到这种数据包分发策略用于无状态服务,当连接断开后相关信息会直接从内存中删除,所以 Server->getClientInfo 是获取不到相关连接信息的。

    • 返回值

      • 调用失败返回 false
      • 调用成功返回 array
    $fd_info = $server->getClientInfo($fd);
    var_dump($fd_info);
    
    array(7) {
      ["reactor_id"]=>
      int(3)
      ["server_fd"]=>
      int(14)
      ["server_port"]=>
      int(9501)
      ["remote_port"]=>
      int(19889)
      ["remote_ip"]=>
      string(9) "127.0.0.1"
      ["connect_time"]=>
      int(1390212495)
      ["last_time"]=>
      int(1390212760)
    }
    参数作用
    reactor_id 来自哪个 Reactor 线程
    server_fd 来自哪个监听端口 socket,这里不是客户端连接的 fd
    server_port 来自哪个监听端口
    remote_port 客户端连接的端口
    remote_ip 客户端连接的 IP 地址
    connect_time 客户端连接到 Server 的时间,单位秒,由 master 进程设置
    last_time 最后一次收到数据的时间,单位秒,由 master 进程设置
    close_errno 连接关闭的错误码,如果连接异常关闭,close_errno 的值是非零,可以参考 Linux 错误信息列表
    recv_queued_bytes 等待处理的数据量
    send_queued_bytes 等待发送的数据量
    websocket_status [可选项] WebSocket 连接状态,当服务器是 SwooleWebSocketServer 时会额外增加此项信息
    uid [可选项] 使用 bind 绑定了用户 ID 时会额外增加此项信息
    ssl_client_cert [可选项] 使用 SSL 隧道加密,并且客户端设置了证书时会额外添加此项信息

    getClientList()

    遍历当前 Server 所有的客户端连接,Server::getClientList 方法是基于共享内存的,不存在 IOWait,遍历的速度很快。另外 getClientList 会返回所有 TCP 连接,而不仅仅是当前 Worker 进程的 TCP 连接。别名是 SwooleServer->connection_list()

    SwooleServer->getClientList(int $start_fd = 0, int $pageSize = 10): bool|array
    • 参数

      • int $start_fd

        • 功能:指定起始 fd
        • 默认值:无
        • 其它值:无
      • int $pageSize

        • 功能:每页取多少条,最大不得超过 100
        • 默认值:无
        • 其它值:无
    • 返回值

      • 调用成功将返回一个数字索引数组,元素是取到的 $fd。数组会按从小到大排序。最后一个 $fd 作为新的 start_fd 再次尝试获取
      • 调用失败返回 false
    • 提示

      • 推荐使用 Server::$connections 迭代器来遍历连接
      • getClientList 仅可用于 TCP 客户端,UDP 服务器需要自行保存客户端信息
      • SWOOLE_BASE 模式下只能获取当前进程的连接
    • 示例

    $start_fd = 0;
    while (true) {
      $conn_list = $server->getClientList($start_fd, 10);
      if ($conn_list === false or count($conn_list) === 0) {
          echo "finish
    ";
          break;
      }
      $start_fd = end($conn_list);
      var_dump($conn_list);
      foreach ($conn_list as $fd) {
          $server->send($fd, "broadcast");
      }
    }

    SwooleWebSocketFrame

    在 v4.2.0 版本中,新增了服务端和客户端发送 SwooleWebSocketFrame 对象的支持
    在 v4.4.12 版本中,新增了 flags 属性以支持 WebSocket 压缩帧,同时增加了一个新的子类 SwooleWebSocketCloseFrame

    一个普通的 frame 对象具有以下属性

    object(SwooleWebSocketFrame)#1 (4) {
      ["fd"]      =>  int(0)
      ["data"]    =>  NULL
      ["opcode"]  =>  int(1)
      ["finish"]  =>  bool(true)
    }

    SwooleWebSocketCloseFrame

    一个普通的 close frame 对象具有以下属性,多了 code 和 reason 属性,记录了关闭的错误代码和原因,code 可在 websocket 协议中定义的错误码 查询,reason 若是对端没有明确给出,则为空

    如果服务端需要接收 close frame, 需要通过 $server->set 开启 open_websocket_close_frame 参数

    object(SwooleWebSocketCloseFrame)#1 (6) {
      ["fd"]      =>  int(0)
      ["data"]    =>  NULL
      ["finish"]  =>  bool(true)
      ["opcode"]  =>  int(8)
      ["code"]    =>  int(1000)
      ["reason"]  =>  string(0) ""
    }

    在用于发送时,fd 属性会被忽略 (因为服务器端 fd 是第一个参数,客户端无需指定 fd), 所以 fd 是一个只读属性

    exist

    判断 WebSocket 客户端是否存在,并且状态为 Active 状态。

    v4.3.0 以后,此 API 仅用于判断连接是否存在,请使用 isEstablished 判断是否为 WebSocket 连接

    SwooleWebSocketServer->exist(int $fd): bool



    isEstablished

    检查连接是否为有效的 WebSocket 客户端连接。

    此函数与 exist 方法不同,exist 方法仅判断是否为 TCP 连接,无法判断是否为已完成握手的 WebSocket 客户端。

    SwooleWebSocketServer->isEstablished(int $fd): bool
    • 参数

      • int $fd

        • 功能:客户端连接的 ID【如果指定的 $fd 对应的 TCP 连接并非 WebSocket 客户端,将会发送失败】
        • 默认值:无
        • 其它值:无
     
  • 相关阅读:
    重新排列数组
    一维数组的动态和
    aiohttp实现爬虫功能
    python django项目创建及前期准备(使用pycharm)
    vue 使用高德开放平台获取经纬度
    git切换分支时,该分支的修改被带到另一个分支
    vue刻度尺组件
    js将PDF转为base64格式,并在将base64格式PDF回显在页面中
    Linux系统(Centos)安装tomcat和部署Web项目
    linux下安装 tomcat 和配置防火墙开放8080端口
  • 原文地址:https://www.cnblogs.com/xiaohe520/p/13957022.html
Copyright © 2020-2023  润新知