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

2016-01-24
使用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