千家信息网

workerman中后端消息实时推送至前端的方法

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,workerman中后端消息实时推送至前端的方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在开发过程中,我们经常会遇到如下这种情
千家信息网最后更新 2025年01月24日workerman中后端消息实时推送至前端的方法

workerman中后端消息实时推送至前端的方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在开发过程中,我们经常会遇到如下这种情况。前端列表展示后台数据库中的数据,但是在后台的某一个接口中向数据库插入一条数据,此时数据库已更新,但是前端展示数据并没有更新,需要手动刷新才可以。但是每次都自己手动更新,太麻烦了,这时候就可以用到workerman来解决问题了。

Workerman框架是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。

那我们应该如何能使用才能解决上述问题呢?

1.前后端建立websocket的长连接,用于互相的消息推送

2.后端内部在建立一个监听进程(协议不限)

3.在接口往数据库中插入数据成功后,想内部监听端口推送数据

4.在收到内部监听端口的推送消息之后,后端在向前端通过websocket推送消息,实现刷新

在下载好workerman框架源码后,我们来实现上述过程。

实现代码:

server.php

reusePort=true) */$worker->count = 1;// worker进程启动后创建一个text Worker以便打开一个内部通讯端口$worker->onWorkerStart = function($worker){    // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符    $inner_text_worker = new Worker('text://0.0.0.0:5678');    $inner_text_worker->onMessage = function($connection, $buffer)    {        // $data数组格式,里面有uid,表示向那个uid的页面推送数据        $data = json_decode($buffer, true);        $uid = $data['uid'];        // 通过workerman,向uid的页面推送数据        $ret = sendMessageByUid($uid, $buffer);        // 返回推送结果        $connection->send($ret ? 'ok' : 'fail');    };    // ## 执行监听 ##    $inner_text_worker->listen();};// 新增加一个属性,用来保存uid到connection的映射$worker->uidConnections = array();// 当有客户端发来消息时执行的回调函数$worker->onMessage = function($connection, $data){    global $worker;    // 判断当前客户端是否已经验证,既是否设置了uid    if(!isset($connection->uid))    {        // 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)        $connection->uid = $data;        /* 保存uid到connection的映射,这样可以方便的通过uid查找connection,         * 实现针对特定uid推送数据         */        $worker->uidConnections[$connection->uid] = $connection;        return;    }}; // 当有客户端连接断开时$worker->onClose = function($connection){    global $worker;    if(isset($connection->uid))    {        // 连接断开时删除映射        unset($worker->uidConnections[$connection->uid]);    }}; // 向所有验证的用户推送数据function broadcast($message){    global $worker;    foreach($worker->uidConnections as $connection)    {        $connection->send($message);    }} // 针对uid推送数据function sendMessageByUid($uid, $message){    global $worker;    if(isset($worker->uidConnections[$uid]))    {        $connection = $worker->uidConnections[$uid];        $connection->send($message);        return true;    }    return false;} // 运行所有的workerWorker::runAll();

push.php

'uid1', 'percent'=>'88%');// 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符fwrite($client, json_encode($data)."\n");// 读取推送结果echo fread($client, 8192);  ?>

clien.html

        

运行流程:

打开cmd,运行server.php

打开前端页面和console

在打开一个cmd,运行push.php

此时在看前端页面,console就收收到消息。

关于workerman中后端消息实时推送至前端的方法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

数据 推送 消息 前端 端口 问题 数据库 页面 监听 运行 验证 方法 客户 客户端 框架 通讯 开发 支持 更新 实时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 颐和互联网科技负责人 我的世界升级服务器版本教程 数据库技术大几学 光荣使命老是连接服务器超时 ap认证软件开发前景 天下三再战今朝服务器 蓝牙网络技术相关书籍 网络安全主要来自内部网络 数据库导入后显示乱码 灌篮高手没有服务器 计算机网络技术论文格式模板 广州卡考网络技术有限公司 深圳市赢天互联网科技有限公司 我的世界最强斗罗服务器武魂觉醒 kms服务器激活安全嘛 网络安全应急预案演练汇报 服务器存储管理规定 回收机房设备服务器工作站 网络技术是指针对数据的采集 未转变者服务器删档 网络安全手抄报资料简单 网络安全防控工作立即整改 巴中软件开发价格多少 广州新华互联网科技学校是职高吗 图灵奖获得者照片数据库 北京服务器机柜销售价格 拿自己的电脑做云服务器 软件开发如何物联网创业 窗帘设计制作软件开发 数据库主索引
0