think+php5+定时任务,一个简单的定时任务

利用workerman可以常驻进程的特性,我们可以写一个简单的定时任务。

*****

**## 逻辑代码中,请不要使用`exit `、`die `、`sleep`语句**

*****

## 1、安装workerman

workerman是一个通用的socket服务器框架。怎么去理解这句话呢?你不能把workerman和thinkphp等同起来,虽然都是php框架,但做的事情不一样。

我们可以把workerman看做一个容器,对外提供基于指定协议或者自定义协议的网络服务。某种意义上,workerman和apache、nginx干的事情一样。

为了区分workerman和thinkphp,我们此例子中,并未部署thinkphp。

进入自己的项目目录,或者新建一个空目录`TimerExample`:

```

composer require workerman/workerman

```

然后我们的目录就会有以下文件或目录:

```

TimerExample目录(或者你的项目目录)

├─vendor

│ ├─composer

│ ├─workerman workerman核心代码

│ ├─autoload.php

├─composer.json

├─composer.lock

```

## 2、新建逻辑处理类

这些目录或者文件,我们基本不用做任何改动,然后我们在新建`TimerExample/app/`目录和新建一个`app/Job`的类

```

class Job

{

public function curlUrl($url)

{

$data = [];

return $data;

}

protected function saveData()

{

return true;

}

}

```

## 3、新建入口文件

我们在项目跟目录,新建一个文件`Timer.php`:

```

use Workerman\Worker;

use \Workerman\Lib\Timer;

require_once __DIR__ . '/vendor/autoload.php';

require_once __DIR__ . '/app/Job.php';

// 创建一个Worker监听2345端口,使用http协议通讯

$task = new Worker("http://0.0.0.0:2345");

//进程数,如果没有$task->id === 0则会执行两次

$task->count = 2;

$task->onWorkerStart = function($task)

{

//第一个任务进程

if($task->id === 0)

{

Timer::add(5, function(){//每5秒执行一次

$job = new \app\Job();

$job->curlUrl('http://www.baidu.com');

});

}

};

// 运行worker

Worker::runAll();

```

## 4、命令行启动服务

以debug(调试)方式启动

`php Timer.php start`

以daemon(守护进程)方式启动

`php Timer.php start -d`

这样我们就完成了一个简单的定时任务。

## 5、扩展:多个不同任务

`Timer.php`代码,第一个任务进程每5秒执行一次,第二个进程每10秒执行一次,进程之间相互独立,非阻塞模式。

```

use Workerman\Worker;

use \Workerman\Lib\Timer;

require_once __DIR__ . '/vendor/autoload.php';

require_once __DIR__ . '/app/Job.php';

require_once __DIR__ . '/app/Job2.php';

// 创建一个Worker监听2345端口,使用http协议通讯

$task = new Worker("http://0.0.0.0:2345");

//进程数,如果没有$task->id === 0则会执行两次

$task->count = 2;

$task->onWorkerStart = function($task)

{

//第一个任务进程,每5秒执行一次

if($task->id === 0)

{

Timer::add(5, function(){

$job = new \app\Job();

$job->curlUrl('http://www.baidu.com');

});

}

//第二个任务进程,每十秒执行一次

if($task->id === 1)

{

Timer::add(10, function(){

$job2 = new \app\Job2();

$job2->curlUrl('http://www.baidu.com');

});

}

};

// 运行worker

Worker::runAll();

```

## 6、扩展:数据库操作

workerman官方文档:[Workerman/MySQL](http://doc.workerman.net/components/workerman-mysql.html)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值