0

0

Swoole怎么获取服务器当前的连接列表

穿越時空

穿越時空

发布时间:2025-09-24 15:14:01

|

955人浏览过

|

来源于php中文网

原创

答案:通过 $server->connections 获取 Swoole 当前活跃连接的 fd 列表,结合 isEstablished 和 connection_info 可管理连接状态,适用于广播、监控等场景。

swoole怎么获取服务器当前的连接列表

在 Swoole 中,获取服务器当前的连接列表可以通过 server->connections 属性来实现。这个属性是一个只读数组,保存了当前所有活跃的客户端连接的文件描述符(即 $fd)。

1. server->connections 的基本使用

该属性返回一个包含所有活动连接 $fd 的迭代数组。你可以遍历它来获取每个连接的信息。

示例代码:

$server = new Swoole\Server("0.0.0.0", 9501);

$server->on('connect', function ($server, $fd) {
    echo "客户端 {$fd} 已连接\n";
});

$server->on('receive', function ($server, $fd, $reactor_id, $data) {
    // 获取当前所有连接
    $clients = $server->connections;
    echo "当前连接数: " . count($clients) . "\n";
    foreach ($clients as $client_fd) {
        echo "活跃连接 fd: {$client_fd}\n";
    }
    
    $server->send($fd, "已收到消息\n");
});

$server->start();

2. 注意事项和限制

Swoole 的连接列表仅保存 TCP 层面的连接 $fd,不包括关闭中的或已断开的连接。以下几点需要注意:
  • connections 是一个只读数组,不能手动修改
  • 在多进程模式下,connections 只包含当前 Worker 进程所管理的连接(Swoole 4.5+ 支持全局连接表)
  • 如果启用了 开启 reuseport 或多 Reactor,connections 仍能准确反映本进程的连接状态
  • UDP 连接不会出现在 connections 中(UDP 是无连接的)

3. 获取更多连接信息

单纯获取 $fd 可能不够,你可能还需要判断某个连接是否有效,或获取其相关信息。

可以结合以下方法使用:

讯飞智作-虚拟主播
讯飞智作-虚拟主播

讯飞智作是一款集AI配音、虚拟人视频生成、PPT生成视频、虚拟人定制等多功能的AI音视频生产平台。已广泛应用于媒体、教育、短视频等领域。

下载
  • $server->connection_info($fd):获取指定连接的详细信息,如来自哪个 reactor、连接时间、协议类型等
  • $server->isEstablished($fd):判断某个 $fd 是否为有效的 TCP 连接(适用于 WebSocket)

示例:过滤出有效的 WebSocket 连接

foreach ($server->connections as $fd) {
    if ($server->isEstablished($fd)) {
        echo "有效连接: {$fd}\n";
        $info = $server->connection_info($fd);
        print_r($info);
    }
}

4. 实际应用场景

常见用途包括:
  • 向所有客户端广播消息
  • 监控当前在线用户数
  • 主动踢掉某个异常连接
  • 实现心跳检测与超时管理

广播示例:

foreach ($server->connections as $fd) {
    if ($server->isEstablished($fd)) {
        $server->send($fd, "系统通知:即将重启服务!");
    }
}
基本上就这些。只要记住用 $server->connections 拿到所有 $fd,再配合 connection_infoisEstablished 判断状态,就能灵活管理连接列表。

相关专题

更多
swoole为什么能常驻内存
swoole为什么能常驻内存

swoole常驻内存的特性:1. 事件驱动模型减少内存消耗;2. 协程并行执行任务占用更少内存;3. 协程池预分配协程消除创建开销;4. 静态变量保留状态减少内存分配;5. 共享内存跨协程共享数据降低内存开销。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

291

2024.04.10

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

119

2023.07.25

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

284

2023.08.08

tcp和udp有什么区别
tcp和udp有什么区别

tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。想了解更多tcp相关的内容,可阅读本专题下面的相关文章。

379

2024.11.14

Golang WebSocket与实时通信开发
Golang WebSocket与实时通信开发

本专题系统讲解 Golang 在 WebSocket 开发中的应用,涵盖 WebSocket 协议、连接管理、消息推送、心跳机制、群聊功能与广播系统的实现。通过构建实际的聊天应用或实时数据推送系统,帮助开发者掌握 如何使用 Golang 构建高效、可靠的实时通信系统,提高并发处理与系统的可扩展性。

20

2025.12.22

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

9

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

3

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

41

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

103

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.8万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

React核心原理新老生命周期精讲
React核心原理新老生命周期精讲

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号