php 死循环定时任务,php 定时任务

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等第三方框架。

···

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...)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值