上次我们说到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