使用swoole制作evenloop文件更新监…

来源:互联网 发布:淘宝知识侵权 编辑:程序博客网 时间:2024/06/05 23:57
使用swoole的evenloop和php的inotify插件可以很方便的监控文件夹下的文件更新,后面也不用写死循环和sleep
如果使用原生的php是需要写while死循环和sleep。这样效率不是很高

$handleList = array();

       //init
       foreach ($this->_config["log_path"] as$content) {
           $folder =$content["path"];

           //if thefolder not exist
           if(!is_dir($folder)) {
              mkdir($folder, true);
           }

          //创建一个inotify句柄
          $handleList[$folder]["fd"] = inotify_init();

           echo"Listen the folder:" . $folder . PHP_EOL;
          //监听文件,仅监听修改操作,如果想要监听所有事件可以使用IN_ALL_EVENTS
          $handleList[$folder]["desc"] =inotify_add_watch($handleList[$folder]["fd"], $folder,IN_MODIFY);

          //加入到swoole的事件循环中
          swoole_event_add($handleList[$folder]["fd"], function ($fd) use($folder) {
              $events =inotify_read($fd);
              if ($events) {
                 var_dump($folder,$events);
                 foreach ($events as $event) {
                     //echo"inotify Event :" . var_export($event, 1) . "\n";
                 }
              }
           });

后续记得后面不要调用sleep也无需while死循环
今天踩坑我在后面加了while(true){sleep(5);}死活不工作……后来问了峰哥……才知道丢人了……

这个效率很高…dora-rpc的日志收集就这么定了,我会做更多的测试后更新github

最后声明:这段代码的原始版本来自韩天峰的分享:http://my.oschina.net/matyhtf/blog/343508
原创粉丝点击