文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

thinkPHP6+workerman即时通讯小demo

2023-09-07 12:07

关注

上次我们说到js定时异步请求模仿实时通讯。

本次我们就来讲下另一种即时通讯,workerman+tp6

环境:tp6(5也可以),workerman插件,composer,apipost(接口测试软件)

首先执行以下代码安装workerman

composer require topthink/think-worker`

安装好之后

在项目路径下的cofing 文件下找到 config/worker_server.php

   'protocol'       => 'websocket', // 协议 支持 tcp udp unix http websocket text    'host'           => '0.0.0.0', // 监听地址    'port'           => 2346, // 监听端口    'socket'         => '', // 完整监听地址    'context'        => [], // socket 上下文选项    'worker_class'   => 'app\man\Worker', // 自定义Workerman服务类名 支持数组定义多个服务

只需要修改里面对应的参数即可,‘worker_class’可以是多个,需要使用逗号分隔开,也可以写成数组,路径需要写我们的类的绝对路径,不需要带后缀。

worker类代码如下

 

where('order_status',0)->where('is_push',0)->order('id desc')->count('id');            // $system_listener    =   Db::name('system_listener')->cache(true)->order('id desc')->select()->toArray();             if($hasNewDepositOrder){                $depositOrderInfo   =   Db::name('deposit_order')->where('order_status',0)->where('is_push',0)->order('id desc')->find();                // $data   =   ['creatTime'=>$depositOrderInfo['create_time'],'money'=>$depositOrderInfo['pay_amount'],'type'=>'deposit','system_listener'=>$system_listener];                $data   =   ['creatTime'=>$depositOrderInfo['create_time'],'money'=>$depositOrderInfo['pay_amount'],'type'=>'deposit'];    foreach($worker->connections as $connection) {                    if(empty($connection->lastMessageTime)){                        $connection->lastMessageTime =   $time_now;                    }                     if($time_now-$connection->lastMessageTime > self::$heartbeat_time){                        $connection->close();                    }                $connection->send(json_encode($data));                }                Db::name('deposit_order')->where('id',$depositOrderInfo['id'])->save(['is_push'=>1]);            }else{                foreach($worker->connections as $connection) {                    if(empty($connection->lastMessageTime)){                        $connection->lastMessageTime = $time_now;                        continue;                    }                     if($time_now-$connection->lastMessageTime > self::$heartbeat_time){      //连接超时                        $connection->close();                    }                }            }        });    }}

头部引入我们必须的几个类,定义好命名空间

下面的成员变量配置我们的端口以及心跳时间,函数内就是封装我们的自己的逻辑。

重新启动wokkerman

php think worker:server start 开启php think worker:server stop  结束php think worker:server status  查看状态

然后随便进入一个页面,这里需要注意的是在tp6中需要引入view类,否则有可能报错找不到

use think\facade\View;

Driver [Think] not supported  报错解决

将view删除,运行

composer require topthink/think-view

再新建view文件夹,还需要开启777权限,这是博主遇到的真实问题。

页面建好后,我们页面内写

Title

因为上面是根据数据库的信息插入来进行判断了 所以我们通过结构去表中增加数据在前台的 onmessage 中就可以打印出来数据展示

直接通过数据库的新增数据,就可以把对应的信息展示出来 具体逻辑就是worker.php中写的数据库展示逻辑

然后到根目录启动workerman,看下具体的效果。

php think worker:server   启动

 

 然后看到ok了,再见。

 

来源地址:https://blog.csdn.net/zhang_sir5768/article/details/124668114

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯