php 定时任务

29次阅读

共计 1296 个字符,预计需要花费 4 分钟才能阅读完成。

google 百度了下,PHP 任务大体上可以分为三类
最近需要去定时请求数据,然后分析之后 指定相应的文本 通过 socket 广播给用户。
具体的分析 制定文本的业务 不复杂。使用 curl 请求数据。但是对于定时任务这一块怎么使用都不行。
1、服务器计划任务
WIN 服务器可以直接使用定时任务执行相关的应用程序,LINUX 服务器则可以通过在 /etc/crontab 里添加定时任务来实现。
php -f 文件所在位置
缺点:最低一分钟的任务计划。很多请求需要一分钟以内。需要储存上一次的数据,下次再去取。
2、通过死循环实现任务自动执行
建立一个程序文件页面,通过 ignore_user_abort 来设置关闭浏览器页面后仍可执行,那么,在运行该程序页面后,您所需要的任务计划便会一直自动执行。对于一般的 PHP 程序员来说,如果没有足够的把握,这种操作是不被允许的,因为死循环极容易使用服务器当机。
set_time_limit(0); // 取消超时
// ignore_user_abort(true); // 浏览器关闭 继续执行
while (true) {
dongsomthing();
sleep(120); // 定时 120 秒 usleep() 毫秒 1000 毫秒 = 1 秒
}
die;
sleep 和 usleep 都不太精确
缺点:长时间占据内存,经常无缘无故 自己暂停。
3、通过 workman 等第三方框架。
···
<?php
use \Workerman\Worker;
use \Workerman\Lib\Timer;
require_once __DIR__ . ‘./Workerman/Autoloader.php’;

$task = new Worker();
// 开启多少个进程运行定时任务,注意多进程并发问题
$task->count = 1;
$task->onWorkerStart = function($task)
{
// 每 2.5 秒执行一次 支持小数,可以精确到 0.001,即精确到毫秒级别
$time_interval = 30;
Timer::add($time_interval, function()
{
dosomthing()
echo “task run\n”;
});
};

// 运行 worker
Worker::runAll();

?>
···
可以精确到秒,还是会经常暂停!别人说他能跑半年 不停。我是不是开的任务比较多,因为我又 8 个任务 没 30 秒 请求一次。参考 workman 手册(https://www.kancloud.cn/walko…)使用方法很简单 配置好 php 环境,然后直接命令行执行改文件就行了
php -f 文件所在位置
4、使用 GatewayWorker 搭建 socket 服务端
https://www.workerman.net/workerman-chat
因为需要分析出文本之后广播到每个客户端,那如何在调用 socket 方法推送给每个客户呢?参考其他项目中推送消息(https://www.kancloud.cn/walko…)
那如何存入数据库呢?参考 https://www.kancloud.cn/walko…
参考 (https://www.kancloud.cn/walko…

正文完
 0