PHP实现队列的原理
关于的队列的介绍,我这里就不多讲了,随便百度一下都很多
用过laravel框架的童鞋都知道其自带队列功能,之前我很费解,PHP只是一个脚本,有超时机制
为什么能不停的去执行队列呢?
带着这个问题,在网上找了一下相关的介绍,这里我没有研究透laravel的队列,而且用这么高大上的实例来给大家讲,我估计自己都云里雾里
所以我就其原理说明一下
我们新建一个文件queue
<?php
while(true){
echo 1;
sleep(1);
}
然后中 命令行里面 执行 php queue
你会发现每秒钟输出一个1;等了很久,咦,很神奇,为什么php没有超时呢?
对,就是不会超时,Why?
答:实际上PHP执行脚本是不会超时的,我们在网页中看到的诸如504等超时,是由Apache,Nginx,PHP配置文件设置的超时时间决定的,因为PHP命令行执行文件没有使用PHP配置文件,所以默认是不超时的。
ps -ef|grep php
会发现有一个 php queue进程
php超时的疑惑我们解决了
再来看一下队列的原理
新建一个文件 artisan
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
while(1){
$res = $redis->lpop('listname');
if($res){echo $res."\r\n";}
sleep(1);
}
然后php artisan 执行队列
我们来新建一个窗口,进入redis客户端输入以下命令【不会redis的可以在我的博客中找相关资料】
lpush listname a b c d e f g
会发现php artisan这个队列会不断的把redis里我刚刚push进去的值打出来
其实laravel的队列就是这个原理,只不过,它不仅支持redis作为载体,还可以使用其他更多的数据库
有人就要问了,我这php artisan启动了,如果我把窗口关了不就没用了吗,
不不不,Linux 还是可以在后台运行的
只要在命令后面加个 &
php artisan &
就可以啦
这些是PHP队列的基本原理,当然我们还可以去执行对象的队列及更复杂的情况,更多的请研究Laravel吧,由于笔者水平有限,不对的地方还望指正;谢谢
PHP实现队列的原理的更多相关文章
- 消息队列NetMQ 原理分析1-Context和ZObject
前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...
- 消息队列NetMQ 原理分析2-IO线程和完成端口
消息队列NetMQ 原理分析2-IO线程和完成端口 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket 获取超时时间 从完成端口获取处理完的状 ...
- 消息队列NetMQ 原理分析3-命令产生/处理和回收线程
消息队列NetMQ 原理分析3-命令产生/处理和回收线程 前言 介绍 目的 命令 命令结构 命令产生 命令处理 创建Socket(SocketBase) 创建连接 创建绑定 回收线程 释放Socket ...
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...
- 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord
消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...
- Netty构建分布式消息队列实现原理浅析
在本人的上一篇博客文章:Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇 中,重点向大家介绍了AvatarMQ主要构成模块以及目前存在的优缺点.最后以一个生产者.消费者传递消息的例子, ...
- 【转载】socket 的 connect、listen、accept 和全连接队列、半连接队列的原理
转自:http://blog.csdn.net/tennysonsky/article/details/45621341 写在前面: 1. accept 只是从全连接队列拿出一个已经建立好的socke ...
- 并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究
一.ArrayBlockingQueue类图结构 如图ArrayBlockingQueue内部有个数组items用来存放队列元素,putindex下标标示入队元素下标,takeIndex是出队下标,c ...
- redis作为消息队列的原理
Redis队列功能介绍 List 转:https://blog.csdn.net/cestlavieqiang/article/details/84197736 常用命令: Blpop删除,并获得该列 ...
随机推荐
- mysql 用户权限设置
windows使用的zip包的mysql.配置成功后,root用户没有权限,需要进行权限分配.管理员运行cmd,执行以下命令,进入mysql. mysql -u root -p Passwd Pass ...
- push类型消息中间件-消息发布者(二)
1.消息发布者声明 我们以spring的方式来声明一个消息发布者: <bean id="operateLogsMessageManager" class="com. ...
- C#入门经典中的SelectionFont属性为null
14.6.2.richtextbox控件: private void buttonbold_click(object sender, eventargs e) { ...
- Python Data Visualization Cookbook 2.2.2
import csv filename = 'ch02-data.csv' data = [] try: with open(filename) as f://用with语句将数据文件绑定到对象f r ...
- 【C++】最大子列和
此题来自<数据结构与算法>,书中一共介绍了四种方法,这里贴出两种. 1.分治递归,对本题来说,虽然有更好的算法,但是用此题理解分治算法感觉挺有用 #include <iostream ...
- MySQL数据类型和属性
日期和时间数据类型 MySQL数据类型 含义 date 3字节,日期,格式:2014-09-18 time 3字节,时间,格式:08:42:30 datetime 8字节,日期时间,格式:2014-0 ...
- 为什么推荐Zookeeper作注册中心
Zookeeper的数据模型很简单,有一系列被称为ZNode的数据节点组成,与传统的磁盘文件系统不同的是,zk将全量数据存储在内存中,可谓是高性能,而且支持集群,可谓高可用,另外支持事件监听.这些特点 ...
- 正规消息发送器-- ESFramework 4.0 进阶(06)
在ESFramework 4.0 进阶(04)-- 驱动力:通信引擎(下)一文末尾我们已经将通信引擎以及整个消息骨架流程组装起来了,只要通信引擎一接收到消息,框架就会按照规定的流程进行运转.到这里,自 ...
- 洛谷-三连击(升级版)-BOSS战-入门综合练习1
题目描述 Description 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成A:B:C的比例,试求出所有满足条件的三个三位数,若无解,输出“No!!!”. 输入输出格 ...
- Openjudge-计算概论(A)-放苹果
描述: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法.输入第一行是测试数据的数目t(0 <= t < ...