thinkPHP6+workerman即时通讯小demo

上次我们说到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类代码如下

thinkPHP6+workerman即时通讯小demo_第1张图片

 

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   启动

thinkPHP6+workerman即时通讯小demo_第2张图片

 

thinkPHP6+workerman即时通讯小demo_第3张图片

 然后看到ok了,再见。

 

你可能感兴趣的:(linux,php)