示例#1
0
 /**
  * 文件更改监控
  * @param resource $inotify_fd
  * @param int $flag
  * @return boolean
  */
 public static function dealFileModify($inotify_fd, $flag)
 {
     // 获取更新的文件
     $files_to_reload = Inotify::getModifiedFiles();
     // 获得文件与worker的映射关系
     $file_worker_name_map = self::getFilesWorkerNameMap();
     // 遍历要重新载入的文件
     $need_reload = false;
     foreach ($files_to_reload as $file) {
         if (!isset($file_worker_name_map[$file])) {
             self::notice('$file_worker_name_map[$file] not exist file:' . $file);
             continue;
         }
         // 遍历文件
         foreach ($file_worker_name_map[$file] as $worker_name) {
             if (!isset(self::$workerPids[$worker_name])) {
                 self::notice("\\self::{$workerPids[$worker_name]} empty");
                 return false;
             }
             self::notice(" file {$file} updated");
             // 获得每个worker的pid,放入重启队列workerToRestart
             self::addToRestartWorkers(self::$workerPids[$worker_name]);
             $need_reload = true;
         }
     }
     // 需要重启
     if ($need_reload) {
         // 标记server在进程重启状态
         self::restartWorkers();
         Telnet::sendToAllClient("File Updated And Restart Workers ");
     }
 }