尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何自定义实时应用?bloatless/php-websocket四大回调从0到1开发教程

如何自定义实时应用?bloatless/php-websocket四大回调从0到1开发教程 如何自定义实时应用bloatless/php-websocket四大回调从0到1开发教程【免费下载链接】php-websocketSimple WebSocket server implemented in PHP.项目地址: https://gitcode.com/gh_mirrors/ph/php-websocketbloatless/php-websocket是一个用纯 PHP 实现的轻量级 WebSocket 服务器专门帮你快速搭建实时应用聊天室、状态推送、在线通知等。它把复杂的 WebSocket 协议封装得极其简单你只需继承一个基类实现四大回调onConnect、onDisconnect、onData、onIPCData就能从零开发出自己的实时通信功能。本文是一份面向新手的完整教程带你在 10 分钟内理解整个开发流程。 项目速览为什么选择 php-websocket很多 PHP 开发者想做实时功能却觉得 WebSocket 协议太复杂、框架太重。这个项目主打简单、无冗余纯 PHP 实现基于ext-sockets扩展无需 Swoole、Event 等重型依赖应用化架构一个服务器可挂载多个应用Application聊天、状态监控各走各的通道跨进程推送IPC其他 PHP 进程可以直接向服务器塞数据非常适合博客发新文章时实时通知在线用户 定位说明作者将其定位为教育与小型内部工具用途不适合承载高并发生产流量。需要更稳健的方案时可参考 Ratchet 等成熟框架。 快速安装PHP WebSocket 服务器一键引入环境要求PHP 7.4且开启json与sockets两个扩展。通过 Composer 安装composer require bloatless/php-websocket启动一个最简服务器参考 examples/server.php 中的完整示例$server new \Bloatless\WebSocket\Server(127.0.0.1, 8000, /tmp/phpwss.sock); $server-registerApplication(chat, Chat::getInstance()); $server-run();然后执行php server.php服务器就会在localhost:8000监听连接。核心类位于src/Server.php配置选项最大连接数、Origin 校验等都在该类中。 核心架构Application 与四大回调服务器本身只负责接线真正的业务逻辑由应用提供。每个应用都是单例继承自src/Application/Application.php抽象类并实现src/Application/ApplicationInterface.php中定义的四个回调回调触发时机典型用途onConnect客户端连接成功记录在线用户、分配昵称onDisconnect客户端断开清理会话、更新在线人数onData收到客户端消息处理聊天内容、请求指令onIPCData本机其他进程推送数据接收博客/订单等系统消息每个回调都会收到一个Connection对象定义于src/Connection.php通过它可以调用send()向客户端发消息、getClientId()获取唯一连接 ID。 四大回调逐个拆解1️⃣ onConnect如何监听客户端连接握手完成后触发。官方 Chat 示例在这里给每个新客户端分配一个随机昵称examples/Application/Chat.phppublic function onConnect(Connection $connection): void { $id $connection-getClientId(); $this-clients[$id] $connection; $this-nicknames[$id] Guest . rand(10, 999); }⚠️ 注意这里保存的$this-clients数组就是你的在线用户表后续广播消息全靠它。2️⃣ onDisconnect客户端断开时做什么与onConnect配对使用负责清理数据避免内存泄漏public function onDisconnect(Connection $connection): void { unset($this-clients[$id], $this-nicknames[$id]); }内置的StatusApplicationsrc/Application/StatusApplication.php就是一个现成的参考它专门统计并广播所有客户端的连/断事件。3️⃣ onData如何接收和处理客户端消息这是最核心的回调。协议约定客户端发送的 JSON 必须包含action和data两个字段基类提供了decodeData()帮你解析。Chat 示例的处理流程是解析 JSON校验action是否为echo取出消息内容拼接昵称遍历在线客户端逐一send()广播4️⃣ onIPCData跨进程推送数据到实时服务器这是本项目最有趣的特性服务器启动时会在本机创建一个 Unix Domain Socket如/tmp/phpwss.sock其他 PHP 脚本可以直接向它推送数据触发目标应用的onIPCData回调。典型场景博客发布新文章 → 通知聊天室所有在线用户。完整示例见examples/push.php$pushClient new \Bloatless\WebSocket\PushClient(//tmp/phpwss.sock); $pushClient-sendToApplication(chat, [ action echo, data 新文章已发布, ]);实现类在src/PushClient.php。注意推送的 payload 不能超过 64KB。 从 0 到 1浏览器端如何连上服务器服务端就绪后浏览器只需原生WebSocket即可接入应用名就是 URL 路径如/chatlet socket new WebSocket(ws://127.0.0.1:8000/chat); socket.onmessage (msg) console.log(JSON.parse(msg.data).data);前端发送消息时记得包上action和data字段socket.send(JSON.stringify({ action: echo, data: 大家好 }));项目中还提供了可直接打开体验的演示页面examples/public/chat.html聊天室和examples/public/status.html状态监控。⚙️ 进阶技巧用 Timer 实现定时任务长驻进程常需要周期性执行逻辑如定时清理、心跳检测。Server内置定时器支持闭包即可无需引入额外调度组件$server-addTimer(5000, function () use ($chat) { $chat-someMethod(); // 每 5 秒执行一次 });❓ 新手常见问题清单支持 SSL 吗不支持。生产环境可前置 nginx 等反向代理处理 TLS。支持二进制消息吗不支持仅文本帧。能接多少用户默认最大 30 个客户端、每 IP 5 条连接可通过setMaxClients()/setMaxConnectionsPerIp()调整。应用如何注册在启动脚本中调用$server-registerApplication(应用名, 应用实例)浏览器连接路径即为/应用名。消息格式不对会怎样decodeData()会抛出异常示例中用 try-catch 捕获建议接入 PSR-3 日志器src/Logger/StdOutLogger.php方便排查。 总结php-websocket 的设计哲学是把协议复杂度关在服务器里只把四个回调留给你用onConnect/onDisconnect管好用户生命周期用onData处理实时消息用onIPCData打通跨进程数据流。读懂examples/Application/Chat.php这 100 多行代码你就掌握了在 PHP 中开发实时应用的完整套路 【免费下载链接】php-websocketSimple WebSocket server implemented in PHP.项目地址: https://gitcode.com/gh_mirrors/ph/php-websocket创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表