返回顶部
首页 > 资讯 > 精选 >如何从 fsnotify 过滤重复的系统消息
  • 501
分享到

如何从 fsnotify 过滤重复的系统消息

2024-02-11 10:02:24 501人浏览 八月长安
摘要

PHP小编百草在这里与大家分享一种有效的方法,即如何从fsnotify过滤重复的系统消息。在日常的开发工作中,我们经常会遇到需要实时监控文件系统变化的场景,而fsnotify正是一个强

PHP小编百草在这里与大家分享一种有效的方法,即如何从fsnotify过滤重复的系统消息。在日常的开发工作中,我们经常会遇到需要实时监控文件系统变化的场景,而fsnotify正是一个强大的工具。然而,当系统频繁变动时,可能会导致大量的重复消息出现,给我们的工作带来困扰。因此,本文将教您一种简单而实用的过滤重复系统消息的方法,帮助您提高工作效率。

问题内容

我使用“GitHub.com/fsnotify/fsnotify”来监听文件更改,但是我应该如何多次过滤某些消息?

func listener() {
    watcher, err := fsnotify.newwatcher()
    if err != nil {
        log.fatal(err)
    }
    defer watcher.close()
    done := make(chan bool)
    Go func() {
        for {
            select {
            case event, ok := <-watcher.events:
                if !ok {
                    return
                }
                log.println("event:", event.name, event.op)

                // writing in this way reduces some messages:
                if event.op&fsnotify.rename == fsnotify.rename {
                    // do ...
                } else if event.op&fsnotify.create == fsnotify.create {
                    // do ...
                } else if event.op&fsnotify.write == fsnotify.write {
                    // do ...
                } else if event.op&fsnotify.remove == fsnotify.remove {
                    // do ...
                }
            case _, ok := <-watcher.errors:
                if !ok {
                    return
                }
            }
        }
    }()
    
    err = watcher.add("e:/.../demo")
    if err != nil {
        log.fatal(err)
    }
    <-done
}

比如write、create事件发生了好几次,我发现官方已经修复了bug,但是好像没有完全解决

2022/12/12 21:00:55 event: e:\...\demo\a.bbb create
2022/12/12 21:00:55 event: e:\...\demo\a.bbb create
2022/12/12 21:00:55 event: e:\...\demo\a.bbb create


2022/12/12 21:01:57 event: e:\...\demo\2.md write
2022/12/12 21:01:57 event: e:\...\demo\2.md write
2022/12/12 21:01:57 event: e:\...\demo\2.md write
2022/12/12 21:01:57 event: e:\...\demo\2.md write
2022/12/12 21:01:57 event: e:\...\demo\2.md write
2022/12/12 21:01:57 event: e:\...\demo\2.md write
2022/12/12 21:01:57 event: e:\...\demo\2.md write

我应该如何过滤消息?

##############################

var syncMap sync.Map
go func() {
    for {
        select {
        case event, ok := <-watcher.Events:
            if !ok {
                return
            }
            fPath := strings.ReplaceAll(event.Name, "\\", "/")
            pathKey, _ := syncMap.Load(fPath)
            if pathKey != 1 {
                // ...
                syncMap.Store(fPath, 1)

                go func() {
                    time.Sleep(time.Second * 2)
                    syncMap.Delete(fPath)
                }()
            }
        case _, ok := <-watcher.Errors:
            if !ok {
                return
            }
        }
    }
}()

解决方法

如果发出事件的库不在您的控制之下,您只能更改处理重复项的方式。 您可以使用 map[string]bool 来跟踪您已经看到/处理的事件,因此修改您的代码可以执行以下操作:

seenMap := make(map[string]bool)
go func() {
    for {
        select {
        case event, ok := <-watcher.Events:
            if !ok {
                return
            }
            log.Println("event:", event.Name, event.Op)
            _, seen := seenMap[event.Name]
            if !seen {
                // Writing in this way reduces some messages:
                if event.Op&fsnotify.Rename == fsnotify.Rename {
                    // do ...
                } else if event.Op&fsnotify.Create == fsnotify.Create {
                    // do ...
                } else if event.Op&fsnotify.Write == fsnotify.Write {
                    // do ...
                } else if event.Op&fsnotify.Remove == fsnotify.Remove {
                    // do ...
                }
                seenMap[event.Name] = true
            }
        case _, ok := <-watcher.Errors:
            if !ok {
                return
            }
        }
    }
}()

以上就是如何从 fsnotify 过滤重复的系统消息的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 如何从 fsnotify 过滤重复的系统消息

本文链接: https://lsjlt.com/news/563416.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何从 fsnotify 过滤重复的系统消息
    php小编百草在这里与大家分享一种有效的方法,即如何从fsnotify过滤重复的系统消息。在日常的开发工作中,我们经常会遇到需要实时监控文件系统变化的场景,而fsnotify正是一个强...
    99+
    2024-02-11
  • sql如何过滤重复
    sql 中过滤重复记录的方法包括:使用 distinct 关键字去除重复值。使用 group by 子句分组结果并返回每组的第一行。使用 count() 函数查找出现多次的值并进一步过滤...
    99+
    2024-06-06
  • rabbitmq如何保证消息不重复消费
    RabbitMQ无法直接保证消息消费的唯一性,但可以通过以下几种方法来尽量避免消息的重复消费:1. 消费端手动确认:消费者从队列中取...
    99+
    2023-09-20
    rabbitmq
  • javascript如何过滤数组重复元素
    小编给大家分享一下javascript如何过滤数组重复元素,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!javascript过滤数组重复元素的实现方法实现代码:function ...
    99+
    2024-04-02
  • 在Storm中如何实现消息过滤和路由功能
    在Storm中,可以通过定义Bolt来实现消息过滤和路由功能。具体步骤如下: 创建一个过滤器Bolt来处理消息过滤功能。在这个Bo...
    99+
    2024-03-11
    Storm
  • Kafka如何处理消息丢失和重复消费的问题
    Kafka通过使用消息确认机制来处理消息丢失和重复消费的问题。在Kafka中,生产者发送消息到主题时,可以选择是否开启消息确认机制。...
    99+
    2024-04-02
  • bat批处理如何实现过滤重复行
    这篇文章给大家分享的是有关bat批处理如何实现过滤重复行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。a.txt内容如下:123456789123123789获取重复的行,并且重复的行只保留一次,处理后得到b.t...
    99+
    2023-06-08
  • 【测试开发】Mq消息重复如何测试?
    本篇文章主要讲述重复消费的原因,以及如何去测试这个场景,最后也会告诉大家,目前互联网项目关于如何避免重复消费的解决方案。 Mq为什么会有重复消费的问题 Mq 常见的缺点之一就是消息重复消费问题,产生这种问题的原因是什么呢?有以下几点: 工...
    99+
    2023-09-15
    php 开发语言 自动化测试 软件测试 功能测试 程序人生 职场发展
  • 电脑重装系统如何取消
    这篇文章主要讲解了“电脑重装系统如何取消”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“电脑重装系统如何取消”吧!重装系统取消的方法 1、点击工具-文件夹选...
    99+
    2023-03-07
    电脑
  • win10系统中如何彻底关闭系统消息通知
    这篇文章主要介绍了win10系统中如何彻底关闭系统消息通知,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。台式机win10系统彻底关闭系统通知消息方法:在键盘上按下win+R调...
    99+
    2023-06-27
  • Springboot如何设置过滤器及重复读取request里的body
    目录HttpServletRequest的输入流只能读取一次的原因重复读取body中数据的方法springboot的过滤器上面的getBody的代码需求: request的conte...
    99+
    2024-04-02
  • 项目中如何使用axios过滤多次重复请求
    这篇文章主要讲解了“项目中如何使用axios过滤多次重复请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“项目中如何使用axios过滤多次重复请求”吧!目录一、前言:这个情况下,我们通常的做...
    99+
    2023-06-20
  • 如何用消息系统避免分布式事务
    前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。上述场景...
    99+
    2024-04-02
  • Linux下如何部署分布式消息系统Kafka
    今天小编给大家分享一下Linux下如何部署分布式消息系统Kafka的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Kafka是...
    99+
    2023-06-27
  • Swoole webSocket消息服务系统压力如何测试
    本篇内容主要讲解“Swoole webSocket消息服务系统压力如何测试”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Swoole webSocket消息服务系统压力如何测...
    99+
    2023-07-05
  • JavaScript中如何对大量数据的多重过滤
    本篇文章为大家展示了JavaScript中如何对大量数据的多重过滤,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。所有代码使用 ES2015 语法,需要 ES5 语法...
    99+
    2024-04-02
  • 如何关闭Win8系统更改计算机的消息通知
    微软今日向Windows 8或Windows Server 2012用户推送了首个Windows 8软件更新包。为了系统安全,Windows8延续了Windows7的更改计算机就会有提示信息弹出功能。如果你...
    99+
    2022-06-04
    消息 计算机 通知
  • 如何使用MySQL创建买菜系统的用户消息表
    如何使用MySQL创建买菜系统的用户消息表买菜系统是一种在线购物平台,为用户提供了方便快捷的食材购买服务。用户在使用该系统进行购物的同时,系统也需要向用户发送一些重要的消息,如订单确认、配送信息等。为了管理和记录这些消息,购物系统必须建立一...
    99+
    2023-11-01
    MySQL 创建 用户消息表
  • 项目中如何使用axios过滤多次重复请求详解
    目录一、前言:这个情况下,我们通常的做法有两种:二、CancelToken类最终效果总结一、前言: 我们在web应用开发过程当中,经常会遇到一个时刻发起了多个请求的场景 这个情况...
    99+
    2024-04-02
  • 关于MySQL 大批量插入时如何过滤掉重复数据
    目录一、发现问题二、删除全部重复数据,一条不留三、删除表中删除重复数据,仅保留一条四、开始删除重复数据,仅留一条前言: 加班原因是上线,解决线上数据库存在重复数据的问题,发现了程序的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作