讲师中心 微信公众号
AI工具推荐 视频效率加速

php连接websocket怎么关闭连接_php连接websocket优雅关闭【步骤】

秋明小哥_4143

秋明小哥_4143

发布时间:2026-01-30 13:22:02

|

180人浏览过

|

来源于php中文网

原创

PHP客户端需先发送0x8关闭帧(如hex2bin('880203e8')),再接收服务端响应帧,最后fclose();直接fclose()或stream_socket_shutdown()均不满足RFC 6455优雅关闭要求。

php连接websocket怎么关闭连接_php连接websocket优雅关闭【步骤】

PHP 客户端连接 WebSocket 后如何主动关闭?

PHP 本身没有原生 WebSocket 客户端支持,fsockopen 或 stream_socket_client 建立的是裸 TCP 连接,不带 WebSocket 协议帧解析能力。所以「关闭 WebSocket 连接」不是简单 fclose() 就完事——你得先发一个标准的 0x8 类型关闭帧(Close frame),再等对端响应,最后才断开底层 socket。

用 rludlow/websocket-client 等库时怎么调 close()?

主流 PHP WebSocket 客户端库(如 rludlow/websocket-client、textalk/websocket)都封装了关闭逻辑。关键点是:调用 close() 不等于立即断开,它会尝试发送关闭帧并等待对方回 ACK;如果超时或对方没响应,底层 socket 才强制释放。

  • close() 默认带状态码 1000(正常关闭),可传入自定义码如 close(4001)
  • 部分库要求在 close() 前确保已收到 onOpen 回调,否则可能抛 WebSocketException
  • 若服务端未实现关闭帧处理(比如只用 ws:// + netcat 模拟),close() 可能阻塞或静默失败

自己用 stream_socket_client 手动关,必须发关闭帧吗?

必须。RFC 6455 明确要求:任意一端想优雅关闭,必须先发送 0x8 帧,且 payload 前 2 字节为状态码(网络字节序)。跳过这步直接 fclose(),服务端会收到 connection reset 或标记为异常断连。

手动构造关闭帧示例(状态码 1000):

立即学习“PHP免费学习笔记(深入)”;

DingTalk Todo CLI
DingTalk Todo CLI

使用官方 dws CLI(v1.0.32+,10+ 域)管理钉钉任务和待办,教 AI 代理创建、跟踪、同步和自动化钉钉待办工作流。

下载
hex2bin('880203e8')

其中 03e8 是 1000 的十六进制大端表示。注意:发送后应读取服务端返回的关闭帧(最多 125 字节),再调用 fclose();否则可能丢数据或触发重连逻辑。

为什么 stream_socket_shutdown($fp, STREAM_SHUT_RDWR) 不行?

这个函数只是关闭 socket 的读写通道,不发送任何 WebSocket 协议帧。服务端收不到关闭意图,会继续等待数据,直到超时踢出连接。实际效果等同于网络中断,不属于「优雅关闭」。

真正要做的顺序只有这一条路径:发关闭帧 → 收响应帧 → 关 socket。中间任何一步缺失或超时,都意味着连接没被对方「认可式结束」。

最常被忽略的是等待响应帧这步——很多人以为发完就完了,结果服务端还在等 ACK,客户端却已关 socket,造成状态不一致。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

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

下载

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

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
fclose函数的用法
fclose函数的用法

fclose是一个C语言和C++中的标准库函数,用于关闭一个已经打开的文件,是文件操作中非常重要的一个函数,用于将文件流与底层文件系统分离,释放相关的资源。更多关于fclose函数的相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

822

2023.11.30

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

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

175

2025.12.22

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

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

416

2026.01.19

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

975

2026.03.18

WebSocket 前端开发与实战技巧
WebSocket 前端开发与实战技巧

聚焦 WebSocket 在前端项目中的工程化实践,涵盖原生 JavaScript WebSocket 连接的封装与状态管理、Vue 3 中 WebSocket 的 Composable 封装(useWebSocket)、React 中自定义 Hook 管理连接生命周期、心跳检测(Ping/Pong 定时器)与自动断线重连的实现策略、指数退避重连算法、消息序列化协议(JSON / Protobuf / MessagePack)的选型与性

448

2026.05.25

WebSocket发送和接收数据教程合集
WebSocket发送和接收数据教程合集

本专题整合了WebSocket发送与接收数据教程合集,阅读专题下面的文章了解更多详细内容。

321

2026.05.25

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

Playwright 页面操作指南
Playwright 页面操作指南

Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。

0

2026.10.21

Playwright 入门教程
Playwright 入门教程

Playwright入门专题汇集测试框架安装、VS Code配置、录制脚本、编写首个用例、运行调试及查看报告的已审核文章,帮助初学者搭建端到端测试流程。

0

2026.10.21

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn