标签队列下的文章

Jerry Bendy 发布于 04月06, 2015

后台任务和PHP-Resque的使用(五) 创建任务

到目前为止已经让Worker运行了,我们需要创建并添加任务。这一节主要了解什么是任务(Job),以及如何使用任务。简单的说,任务就是传递给Worker要执行的内容。我们需要把Job依次添加到Queue来执行。要把任务添加到队列,程序必须要包含php-resque库以及Redis。使用require_once'/path/to/php-resque/lib/Resque.php';包含php-resque的库文件,它会自动连接到Redis服务器,如果你的Redis服务器不是默认的localhost:6379,你需要使用Resque::setBackent('192.168.1.56:3680...

阅读全文 »

Jerry Bendy 发布于 04月05, 2015

后台任务和PHP-Resque的使用(四) 使用Worker

注意,这篇教程仅适用于Linux和OSX的系统,Windows并不适用。理解Worker的本质技术上讲一个Worker就是一个不断运行的PHP进程,并且不断监视新的任务并运行。一个简单的Worker的代码如下:while(true){$jobs=pullData();//从队列中拉取任务foreach($jobsas$class=>$args){//循环每个找到的任务$job=new$class();$job->perform($args);//执行任务}sleep(300);//等待5分钟后再次尝试拉取任务}以上这些代码的具体实现都可以交给php-resque。创建一个Worker,php-resq...

阅读全文 »

Jerry Bendy 发布于 03月31, 2015

后台任务和PHP-Resque的使用(三) 安装

在第二部分我们使用php-resque作为队列系统,这一节讲如何安装php-resque。PHP-Resque是依赖Redis的,所以需要先安装Redis及PHP的Redis扩展。以下是所有需要安装的组件:RedisPHP的Redis扩展(php-redis)php-resquePHP的PCNTL扩展RedisRedis是一个开源的KV数据库,数据是保存在电脑RAM中的,速度非常快,所以通常可以使用Redis来做缓存,或保存Session等。可以在Redis的官方网站下载最新稳定版本。Redis的安装方法本文不再赘述,安装完成后不要忘记启动。PHP-Resquephp-resque是resque的PHP版本,很多...

阅读全文 »

Jerry Bendy 发布于 03月30, 2015

后台任务和PHP-Resque的使用(二) 队列系统

接着第一部分,Queue需要保存Jobs,Worker需要按照指定的时间间隔在Queue中轮循并执行Jobs。这个系统包含以下三个部分:推送者:推送任务到Queue,可以是任何过程,甚至是Worker;Queue:按顺序保存Jobs;Worker:从Queue中拉取Jobs并执行。注意,这里使用了推送(Push)和拉取(Pull)来代替添加(Add)和获取(Get)。Push:把数据添加到栈的尾部的操作。**_Pull(orPop):_**拉取(或弹出)。弹出并删除栈顶部的数据。Push操作通常会把数据添加到栈的尾部。这种数据类型会保证先添加到队列的项目总是先被读取和删除,即“先进先出”(FIFO,First-i...

阅读全文 »

Jerry Bendy 发布于 03月27, 2015

后台任务和PHP-Resque的使用(一) 介绍

什么是后台任务?后台任务就是运行在程序流程以外的任务,毕竟PHP作为网站后台语言是需要在执行后立即返回数据的,而且一般服务器都有设置执行的超时时间,所以使用PHP去完成一些比较耗时的后台操作就有些问题了。通常在做一些比较耗时的操作时都会想到使用一个后台任务以及任务队列,在流程外执行这些操作,并立即返回给前台一个正在执行的提示。我们来看一个实例:一个社交网站,某用户修改了他的的个人资料中的所在地。一般的流程是这样的:PHP并不是多线程的,所以所有任务必须在前一个任务完成后再能开始,这就会致使用户等待较长的时间。上面例子中,大约3.7秒后用户才能获取到来自服务器的反馈,用户体验较差。需要注意的是在整个流程中最重要的仅...

阅读全文 »