swoole_server->connection_info [编辑本页]

swoole_server->connection_info函数用来获取连接的信息,别名是swoole_server->getClientInfo

function swoole_server->connection_info(int $fd, int $from_id, bool $ignore_close = false)
  • 如果传入的fd存在,将会返回一个数组
  • 连接不存在或已关闭,返回false
  • 第3个参数设置为true,即使连接关闭也会返回连接的信息

需要swoole-1.5.8以上版本
connect_time, last_time 在v1.6.10+可用
connection_info可用于UDP服务器,但需要传入from_id参数

$fdinfo = $serv->connection_info($fd);
var_dump($fdinfo);
array(5) {
  ["from_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)
}

$udp_client = $serv->connection_info($fd, $from_id);
var_dump($udp_client);
  • from_id 来自哪个reactor线程
  • server_fd 来自哪个server socket 这里不是客户端连接的fd
  • server_port 来自哪个Server端口
  • remote_port 客户端连接的端口
  • remote_ip 客户端连接的ip
  • connect_time 连接到Server的时间,单位秒
  • last_time 最后一次发送数据的时间,单位秒
  • close_errno 连接关闭的错误码,如果连接异常关闭,close_errno的值是非零,可以参考Linux错误信息列表

  • ...

    $fdinfo = $serv->connection_info($fd); 这里的 $fdinfo 和 $fd 是哪里声明出来的?

  • zhouleyu

    $fdinfo = $serv->

  • 黄万超

    我写了个UDP服务器 new swoole_server('0.0.0.0', $port, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
    使用connection_info获取的结果只有客户端IP的 这是神马情况啊 结果:{"remote_ip":"127.0.0.1"}

  • zhjx922

    我也是。。。

  • Changer

    好吧,其实是swoole.c里面的程序写的有问题,对于UDP获取remote_ip时候,用的算法错了,在第1531行,不应该用ntohs函数,改成 add_assoc_long(return_value, "remote_port", (int)(from_id - 196608)); 然后重新make 同时,客户端使用UDP端口应该<=59820,大于这个号会报错,没时间找原因,大家先看着吧。

  • Rango-韩天峰

    这个BUG在1.7.5版本中已修复

  • 倪明

    array(9) { ["uid"]=> int(0) ["from_id"]=> int(2) ["from_fd"]=> int(20) ["connect_time"]=> int(1425176782) ["last_time"]=> int(1425176782) ["websocket_status"]=> int(0) ["from_port"]=> int(9501) ["remote_port"]=> int(40617) ["remote_ip"]=> string(9) "127.0.0.1" }

    这里的uid 是在哪儿设置的?文档上没说

  • 张尧

    建议能让大家一起来维护文档

  • 咸鱼

    socket_type 1是 TCP, 2 是 UDP 吗

  • 杨润林

    $fd会一直自动增加,这样正常吗?长时间运行服务器会不会导致$fd溢出?

  • OH

    我也是这样,正常吗?

  • 1231

    能否实现可以增加属性?比如存储客户端的业务唯一ID,这样发送时直接根据ID能找到fd 发送,不用再自己维护一个对应关系