Workerman TCP怎么关闭客户端连接

风婷姑娘_9224

风婷姑娘_9224

2026-09-09

840人浏览

原创

直接调用 $connection->close() 即可断开 tcp 连接,它会触发 shutdown() 和 close() 并随后执行 onclose 回调;onclose 仅是连接已关闭后的通知,不可用于主动断连。

workerman tcp怎么关闭客户端连接

直接调用 $connection->close() 就能断开 TCP 连接

Workerman 的每个客户端连接都封装为一个 Connection 对象,只要拿到这个对象(比如在 onMessageonConnect 回调里),调用它的 close() 方法即可立即关闭该 TCP 连接。它会触发底层 socket 的 shutdown()close(),并最终触发 onClose 回调。

onClose 不是关闭动作,只是连接已关闭后的通知

很多人误以为在 onClose 里写逻辑就能“执行关闭”,其实不是:onClose 是被动回调,发生在连接**已经断开之后**,此时再调用 $connection->close() 无效,甚至可能报错(如 “Connection is closed”)。真正需要主动断连的场景,必须在 onMessageonConnect 或定时器中调用。

吐司AI高清
吐司AI高清

吐司AI高清是一款AI图片处理工具,Toast AI 推出的图像超分辨率/修复工具。

下载
  • 错误写法:$worker->onClose = function($connection) { $connection->close(); }; —— 没有意义,连接早已关闭
  • 正确时机举例:收到特定指令(如 "quit")、认证失败、心跳超时、发送缓冲区满且无法恢复
  • 注意:close() 是异步非阻塞的,调用后不会等待 TCP FIN 完成,但连接状态会立刻变为关闭中

关闭前要不要清空发送缓冲区?看场景

默认情况下,$connection->close() 会尝试把应用层发送缓冲区(maxSendBufferSize)里还没发出去的数据先 flush 掉,再断连。但如果缓冲区积压严重(比如客户端卡死、网络中断),这个过程可能阻塞几秒甚至更久——而 Workerman 的事件循环不能被阻塞。

  • 想“立即断开,丢弃未发数据”:先调用 $connection->destroy()(强制销毁 socket 句柄),再 unset 相关引用
  • 想“尽量发完再断”:保持默认 close() 行为,但建议配合 onBufferFullonBufferDrain 做流控,避免缓冲区无限膨胀
  • 常见坑:maxSendBufferSize 设得过大(如 10MB),又没监听 onBufferFull,会导致内存暴涨或 close 延迟显著

客户端异常断连时,服务端怎么感知并清理资源?

真实网络中,客户端可能直接断电、杀进程、切网,不会发 FIN 包。Workerman 不会立刻知道,得靠心跳机制探测。单纯依赖 onClose 是不可靠的。

  • 必须实现心跳:在 onConnect 中启动定时器,例如每 30 秒发一次 ping,连续 3 次无 pong 就 $connection->close()
  • 别只靠 onError:TCP 层错误(如 ECONNRESET)会触发它,但静默断连不会
  • 清理动作要放在 onClose 里:删用户 session、从在线列表移除、释放绑定的自定义属性(如 $connection->uid
  • 注意:onClose 中不能做耗时操作(如同步写 DB),否则拖慢整个 Worker 进程;应投递到异步任务或记录日志后快速返回
实际关闭操作就一行代码,但什么时候关、为什么关、关之前要不要等、关之后怎么善后——这些才是线上稳定运行的关键。尤其在长连接场景下,忘记清理自定义属性或没配心跳,几天后就会发现内存泄漏或“假在线”用户堆积。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

workerman

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

2026.05.20

126

15

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

2026.05.20

162

12

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

2026.05.20

127

13

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

140

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

60

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

40

25

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

2026.09.16

40

27

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

2026.09.11

360

28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习