class Task { public function onWorkerStart() { new Crontab('1 * * * * *', function(){ //如何调用控制器 }); } }
直接把控制器当成个类实例化试试
试过了 不行 找不到
我这刚测试了下,是可以的。
感谢 ,我找到问题
👌🏻
为什么要这样用,那直接把这个控制器的方法单独封装成一个类不就好了吗?
看下这个插件 https://www.workerman.net/plugin/42
为什么要定时任务调用控制器的方法? 可以把公共方法封装成函数或者单独的类。 代码分层,面向对象编程。
从提的问题来看,大致是想定时请求某个url,即控制器-action。
方法有很多,如果非要使用crontab的话,可以参考如下,希望能帮到你!
use GuzzleHttp\Client; class Task { public function onWorkerStart() { $client = new Client(['verify' => false]); new Crontab('1 * * * * *', function() use ($client){ $params = array( "headers" => array( ), "form_params" => array( ), ); $res = $client->post( "http://127.0.0.1:8788/index/index", $params ); var_dump($res); }); } }
mark
或者类似如下,应该也是可行,仅做参考
use Workerman\Connection\AsyncTcpConnection; class Task { public function onWorkerStart() { $task_connection = new AsyncTcpconnection("tcp://127.0.0.1:8788"); // 每10秒执行执行一次 new Crontab('*/10 * * * * *', function () use ($task_connection) { $task_connection->send("GET /test/index/sleep2 HTTP/1.1\r\nHOST: 127.0.0.1\r\nConnection: keep-alive\r\n\r\n"); }); $task_connection->onMessage = function ($task_connection, $task_result) { echo $task_result . "\r\n"; }; $task_connection->connect(); } }
直接把控制器当成个类实例化试试
试过了 不行 找不到
我这刚测试了下,是可以的。
感谢 ,我找到问题
👌🏻
为什么要这样用,那直接把这个控制器的方法单独封装成一个类不就好了吗?
看下这个插件
https://www.workerman.net/plugin/42
为什么要定时任务调用控制器的方法?
可以把公共方法封装成函数或者单独的类。
代码分层,面向对象编程。
从提的问题来看,大致是想定时请求某个url,即控制器-action。
方法有很多,如果非要使用crontab的话,可以参考如下,希望能帮到你!
mark
或者类似如下,应该也是可行,仅做参考