今天学习了workerman , 初次体验了定时器的效果,结合文档。弄了个文件监控。
好了 废话不多说 直接上代码
1 use Workerman\Worker; 2 require_once __DIR__ . '/Workerman/Autoloader.php'; 3 $monitor_dir = realpath(__DIR__.'/..'); 4 $worker = new Worker(); 5 $worker->name = 'FileMonitor'; 6 $worker->reloadable = false; 7 $last_mtime = time(); 8 $worker->onWorkerStart = function ($task) { 9 global $monitor_dir;10 //每隔2.5 秒 执行一次11 $time_interval = 2.5;12 \Workerman\Lib\Timer::add($time_interval,"check_files_change",array($monitor_dir));13 };14 Worker::runAll();15 16 /**17 * 定时执行函数18 */19 function check_files_change($monitor_dir) {20 global $last_mtime;21 22 // spl 迭代器 php > 5.5 以上 链接 http://php.net/manual/zh/class.recursivedirectoryiterator.php23 $dir_iterator = new RecursiveDirectoryIterator($monitor_dir);24 $iterator = new RecursiveIteratorIterator($dir_iterator);25 foreach ($iterator as $file) {26 // 只对 后缀为php 的文件监控27 if(pathinfo($file, PATHINFO_EXTENSION) != 'php') {28 continue;29 }30 31 // 当前时间和文件最后一次更新文件 比较32 if($last_mtime < $file->getMTime()) {33 echo $file." update and reload\n";34 //windows 必须屏蔽这行代码 不然报错35 // posix_kill(posix_getppid(), SIGUSR1);36 $last_mtime = $file->getMTime();37 break;38 }39 }40 }
运行:在目录里面新建或添加文字