V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Misakas
V2EX  ›  问与答

关于 fsnotify 在监听文件的写入事件时,消息不即时这件事

  •  
  •   Misakas · 2021-04-15 14:31:36 +08:00 · 950 次点击
    这是一个创建于 1316 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Windows 系统,网易云会将当前播放的音乐写入 history 文件,用 golang 的 fsnotify 监视文件时事件会延迟个两三秒才到

    用了下面的步骤试了一下,问题应该是在 fsnotify (或者我的代码)上

    • fsnotify 监视文件,用 notepad 更改 -> Write 消息是即时的
    • 网易云切歌,用 notepad 编辑 history 文件 -> notepad 提示已被编辑,消息是即时的
    • fsnotify 监视文件,网易云切歌 -> Write 消息会延迟几秒到

    虽然有点延迟可以接受,但是非常想搞明白原因是什么。希望有人来科普一下或者甩个关键词

    贴个代码,方便大家复现(

    package main
    
    import (
    	"github.com/fsnotify/fsnotify"
    	"os"
    )
    
    func main() {
    	watcher, _ := fsnotify.NewWatcher()
    
    	defer watcher.Close()
    
    	_ = watcher.Add()
    	
    	for {
    		select {
    		case event, ok := <-watcher.Events:
    			if !ok {
    				return
    			}
    			fmt.Println(event)
    		case err, ok := <-watcher.Errors:
    			if !ok {
    				return
    			}
    			fmt.Println("error:", err)
    		}
    	}
    
    	for{
    		//runtime.Gosched()
    		time.Sleep(1* time.Second)
    	}
    }
    
    
    2 条回复    2021-04-15 21:26:01 +08:00
    zpfhbyx
        1
    zpfhbyx  
       2021-04-15 16:21:30 +08:00
    _ = watcher.Add() 这是监测了所有了吧?
    Misakas
        2
    Misakas  
    OP
       2021-04-15 21:26:01 +08:00
    @zpfhbyx 发帖时不小心修改错了了,watcher.Add() 其实是有值的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3270 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.