您的位置:首页 > 运维架构

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

2017-06-12 17:13 218 查看
使用swoole的evenloop和php的inotify插件可以很方便的监控文件夹下的文件更新,后面也不用写死循环和sleep
如果使用原生的php是需要写while死循环和sleep。这样效率不是很高

$handleList = array();

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

     
      //if the
folder 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: