class Task
{
public function onWorkerStart()
{
new Crontab('1 * * * * *', function(){
//如何調(diào)用控制器
});
}
}
為什么要定時(shí)任務(wù)調(diào)用控制器的方法?
可以把公共方法封裝成函數(shù)或者單獨(dú)的類。
代碼分層,面向?qū)ο缶幊獭?/p>
從提的問題來看,大致是想定時(shí)請(qǐng)求某個(gè)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);
});
}
}
或者類似如下,應(yīng)該也是可行,僅做參考
use Workerman\Connection\AsyncTcpConnection;
class Task
{
public function onWorkerStart()
{
$task_connection = new AsyncTcpconnection("tcp://127.0.0.1:8788");
// 每10秒執(zhí)行執(zhí)行一次
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();
}
}