TP6 worlerman
以下操作我都是在PHP Composer操作
第一步:安装
composer require topthink/think-worker
项目根目录config文件夹增加
worker.php
worker_server.php
第二步:修改相关配置
修改worker_server.php文件:
‘worker_class’ = ‘app\admin\controller\Dingshi’;
这里的路径要全我这里项目配置了多应用模式,默认的tp6是单应用模式,具体查看tp6官方文档
第三步:Dingshi.php代码
<?php
declare(strict_types=1);
namespace app\admin\controller;
use think\Request;
use Workerman\Lib\Timer;
use think\worker\Server;
class Dingshi extends Server
{
protected $socket = 'websocket://0.0.0.0:2346';
public function __construct()
{
parent::__construct();
$this->onMessage();
// 或者这样调用
$this->worker->onWorkerStart = function($worker)
{
echo "Worker starting...\n";
Timer::add(10, array($this, 'index'), array(), true);
};
}
/**
* 收到信息
* @param $connection
* @param $data
*/
public function onMessage()
{
$this->worker->onMessage = function($connection, $data)
{
$connection->send($data."123");
};
}
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{
file_put_contents('a.log',date('Y-m-d H:i:s',time()).'执行了一次定时任务。'.PHP_EOL,FILE_APPEND);
}
}
第四步:开启workerman服务
php think worker:server
运行效果如下:
Worker starting... 这个就是Dingshi.php 21行数据
关闭服务是ctrl+C 使用过程中不要关闭或者退出
第五步:测试通信
打开网页:http://localhost:2346
运行效果如下:
我用的是谷歌 F12在console里面输入
ws = new WebSocket("ws://127.0.0.1:2346");
ws.onopen = function() {
ws.send('admin');
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
};
这个时候页面会弹出 'admin123' 这个时候说明通信成功了,admin123在Dingshi.php 34行
第六步:查看定时任务效果
Dingshi.php 22行
Timer::add(10, array($this, 'index'), array(), true);
这里每10秒会执行下面的index方法
file_put_contents('a.log',date('Y-m-d H:i:s',time()).'执行了一次定时任务。'.PHP_EOL,FILE_APPEND);
这个是在网页根目录a.log文件写数据效果如下