crontab 如何调用控制器方法

sanmao
class Task
{
    public function onWorkerStart()
    {
        new Crontab('1 * * * * *', function(){
            //如何调用控制器
        });
    }
}
994 6 0
6个回答

xiaoshuai

直接把控制器当成个类实例化试试

为什么要这样用,那直接把这个控制器的方法单独封装成一个类不就好了吗?

  • 暂无评论
yzh52521
  • 暂无评论
efnic

为什么要定时任务调用控制器的方法?
可以把公共方法封装成函数或者单独的类。
代码分层,面向对象编程。

  • 暂无评论
taozywu

从提的问题来看,大致是想定时请求某个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);
        });
    }
}
taozywu

或者类似如下,应该也是可行,仅做参考

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();
    }
}
  • 暂无评论
年代过于久远,无法发表回答
🔝