php使用inotify实现队列处理
参考如下文章:
http://blog.jiunile.com/php%E4%BD%BF%E7%94%A8inotify%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97%E5%A4%84%E7%90%86.html
http://sexywp.com/use-inotify-to-monitor-file-system.htm
上面的我已经测试,确实是正确的。

首先,我们需要达成以下一些共识:

  • /dev/shm 为linux下的内存目录,显然在这个目录下建立的东西会放在内存中,默认可以使用50%的内存,在内存不足时,可通过swap进行切换到磁盘。
  • inotify是linux下的文件系统事件监控,可以满足各种文件监控需要,提供了诸如inotify_init,inotify_read等接口,需要linux2.6或以上的内核(uname -a查看),cygwin下好像不能实现。
  • php默认是不提供支持inotify的扩展,所以我们需要通过pecl下载编译安装。

下载inotify (http://pecl.php.net/package/inotify),解压并安装:

1
2
3
4
5
tar -xvf inotify-0.1.6.tgz
cd inotify-0.1.6
/usr/local/php5/bin/phpize
./configure --with-php-config=/usr/local/php5/bin/php-config
make && make install

接着在php.ini文件中加载inotify.so,查看有没有加载成功可通过php -i|grep inotify查看。

接着在/dev/shm建立内存目录,因为队列的处理是需要较高的速度,放到磁盘会有一定的I/O时间消耗,我们建立/dev/shm/inotify目录,然后用php写一个死循环的demo去监控目录,另外,通过变更/dev/shm/inotify目录的文件或属性查看结果:

01
02
03
04
05
06
07
08
09
10
11
12
<?php
$notify = inotify_init();
$rs = inotify_add_watch($notify, '/dev/shm/inotify', IN_CREATE);//IN_CREATE表示只监控新文件的建立,具体参数列表可以在手册inotify处找到。
if(!$rs){
        die('fail to watch /dev/shm/inotify');
}
 
while(1){
        $files = inotify_read($notify);
        print_r($files);
        echo 'continue to process next event';
}

使用inotify模块比不断地循环和scan目录要灵活且省资源,在inotify_read处,没有收到任何事件之前是会一直阻塞的,所以这里的while就不存在有没有操作都需要循环执行。

尝试在/dev/shm/inotify建立一个test.txt的新文件,会在inotify_read返回一个包含所有文件的数组,如:

01
02
03
04
05
06
07
08
09
10
Array
(
    [0] => Array
        (
            [wd] => 1
            [mask] => 256
            [cookie] => 0
            [name] => test.txt
        )
)
 
 

php使用inotify实现队列处理的更多相关文章

  1. Linux 文件操作监控inotify功能及实现原理【转】

    转自:http://blog.chinaunix.net/uid-26585427-id-5012973.html 1. inotify主要功能 它是一个内核用于通知用户空间程序文件系统变化的机制. ...

  2. inotify +rsync进行实时同步

    1.安装rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpmyum -y install ino ...

  3. 烂泥:rsync与inotify集成实现数据实时同步更新

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要 ...

  4. rsync+inotify实时同步环境部署记录

    随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足.首先,rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件 ...

  5. [rsync+inotify]——监控客户端文件变化,rsync同步到服务器

    关于rsync的配置请参考博文:http://www.cnblogs.com/snsdzjlz320/p/5630695.html 实验环境 (1) Rsync服务器:10.0.10.158 (2) ...

  6. Linux inotify功能及实现原理

    http://www.cnblogs.com/jiejnan/archive/2012/05/18/2507476.html 简介: 当需要对 Linux®文件系统进行高效率.细粒度.异步地监控时,可 ...

  7. 真正的inotify+rsync实时同步 彻底告别同步慢

    真正的inotify+rsync实时同步 彻底告别同步慢       http://www.ttlsa.com/web/let-infotify-rsync-fast/     背景 我们公司在用in ...

  8. 【转载】CentsOS系统inotify实时监控服务器文件(夹)定制事件处理程序

    原始博文和参考博文 1.CentsOS系统inotify实时监控服务器文件 2.Linux中让进程在后台运行的方法 3.linux inotify 监控文件系统事件 非常好 方法一 说明: 服务器系统 ...

  9. rsync+inotify实现数据的实时备份

    一.rsync概述 1.1.rsync的优点与不足 rsync与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需 ...

随机推荐

  1. Matlab量化函数quantiz解析

    在Matlab里,有一个量化函数quantiz,其函数形式有以下三种: 输入变量: sig代表的是原始信号; codebook代表的是量化值的集合; partition是分割向量,代表对量化范围分割等 ...

  2. jquery中使用jsonp

    1 .关于jsonp的原理等,请看下面的文章,说的很明白. http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery. ...

  3. Python 文件修改

    # 需求: 把好人换成sb # 必须: # 1. 先从文件中读取内容 # 2. 把要修改的内容进行修改 # 3. 把修改好的内容写人一个新文件 # 4. 删除掉原来的文件 # 5. 把新文件重命名成原 ...

  4. ionic 编写自定义控件

    创建组件 在项目所在目录下执行: ionic g component <ComponentName> 在src/components中会出现: --components |--Compon ...

  5. ReactNative——UI1.登录界面样式设置

    使用React 基本组件结合flex 属性,实现简单登录布局UI 效果 效果预览:

  6. Oracle中varchar2类型字段长度限制使用问题

    为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...

  7. 【机器学习PAI实践十二】机器学习算法基于信用卡消费记录做信用评分

    背景 如果你是做互联网金融的,那么一定听说过评分卡.评分卡是信用风险评估领域常用的建模方法,评分卡并不简单对应于某一种机器学习算法,而是一种通用的建模框架,将原始数据通过分箱后进行特征工程变换,继而应 ...

  8. OC基础:类和对象 分类: ios学习 OC 2015-06-12 18:55 17人阅读 评论(0) 收藏

    OC:Objective-c     面向对象的c语言,简称obj-c或者OC OC和C的区别 1.OC是C语言的超集,OC是在C语言的基础上结合smalltalk的优点,开发出来的语言.oc兼容所有 ...

  9. 如何安装Magento插件

    Magento有着非常多的插件,其实就是模块,那么怎么安装需要的插件呢? 具体方法如下,以安装DeveloperToolbar这个开发插件为例讲解: 1.首先到Magento的官方网站查找到相应的插件 ...

  10. jQuery -- 如何使用jQuery判断某个元素是否存在

    通常我们要判断某个元素是否存在是用: if(document.getElementById('example')) { // do something } else { // do something ...