首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏一个执拗的后端搬砖工

    事件驱动编程

    五 Guava事件总线 EventBus是谷歌开源的实现事件驱动编程事件总线,并且提供了基于注解的编码方式,对于需要实现应用内业务解耦的场景,是一个不错的选择,常用的有有两个类和一个注解:EventBus 六 Spring事件驱动 spring作为除了jdk之外最被广泛使用的基础构件,每个模块之间也大量使用了事件驱动编程,并且留出了扩展点供开发者使用,在满足开闭原则的情况下,开发者可以写很少的代码就能复用 spring的事件驱动编程. ? 总结 本篇介绍了事件驱动编程和几种常见的事件编程实现,对于设计和实现维度来说,guava的事件总线和spring事件驱动都比较成熟,功能比较完善,能够满足大部分业务场景,对于使用spring全家桶的应用可以直接使用 spring事件驱动编程,其他情况下也没有严格意义上的孰优孰劣之分,看个人和团队使用习惯.

    2.2K40发布于 2021-04-26
  • 来自专栏互联网技术栈

    基于事件驱动的并发编程

    异步事件驱动 如果我们的业务逻辑处理使用异步事件驱动(Reactor)的方式,而又需要在本次请求中需要返回请求结果,此时属于同步获取返回值,因此此时我们只能使用阻塞异步或者“并发”“同步”的方式。

    91220发布于 2018-12-12
  • 来自专栏yifei的专栏

    unix编程实践_7_事件驱动编程

    在unxi/linux编程实践第七章的基础上完成的一个小的终端弹球游戏,先来个截图。 存在问题 光标闪烁问题。

    58310编辑于 2022-11-14
  • 来自专栏编程之路的专栏

    (译)SDL编程入门(3)事件驱动编程

    事件驱动编程 除了在屏幕上放置图像外,游戏还要求您处理用户的输入。你可以通过SDL使用事件处理系统来实现这一点。 在主循环的顶部,我们有我们的事件循环。它的作用是不断处理事件队列,直到它清空。 当你按下一个键、移动鼠标或触摸屏幕时,你就会把事件放到事件队列中。 ? 事件队列将按照事件发生的顺序存储它们,等待你处理它们。当你想知道发生了什么事件以便处理它们时,你可以通过调用SDL_PollEvent[5]对事件队列进行轮询以获得最近的事件。 因此,这段代码所做的就是不断地从事件队列中轮询事件,直到它为空。 如果事件队列中的一个事件是SDL_QUIT事件(就是当用户从窗口中点击X按钮时的事件),我们将退出标志设置为true,这样我们就可以退出应用程序。

    1.3K20发布于 2020-09-24
  • 来自专栏一个执拗的后端搬砖工

    【玩转腾讯云】事件驱动编程

    五、Guava事件总线    EventBus是谷歌开源的实现事件驱动编程事件总线,并且提供了基于注解的编码方式,对于需要实现应用内业务解耦的场景,是一个不错的选择,常用的有有两个类和一个注解 六、Spring事件驱动 spring作为除了jdk之外最被广泛使用的基础构件,每个模块之间也大量使用了事件驱动编程,并且留出了扩展点供开发者使用,在满足开闭原则的情况下,开发者可以写很少的代码就能复用 spring的事件驱动编程. ? 七、总结 本篇介绍了事件驱动编程和几种常见的事件编程实现,对于设计和实现维度来说,guava的事件总线和spring事件驱动都比较成熟,功能比较完善,能够满足大部分业务场景,对于使用spring 全家桶的应用可以直接使用spring事件驱动编程,其他情况下也没有严格意义上的孰优孰劣之分,看个人和团队使用习惯.

    2.7K181发布于 2021-04-15
  • 来自专栏张善友的专栏

    Reactive框架:简化异步及事件驱动编程

    Rx致力于事件驱动和异步计算的协调和策划,并且采用新的任务并行库作为它内部的并发机制。 Reactive Extensions可以在任何.NET语言中使用,在F#里面,最有价值的就是.NET事件。 除此之外,F#还提供了一些基本的函数来构造observable集合,并且F#开发人员可以使用Rx获取更加丰富的运算符来构造事件和其他observable集合。 老赵在InfoQ写了一个简要的介绍文章 微软发布Reactive框架,简化异步及事件驱动编程,另外在 上老赵一个很好的一个视频介绍响应式框架: Rx:1-Observable Rx:2-Observable more Rx:3-System.CoreEx.dll Rx:4-[编外篇] .NET4里的Concurrent Collections 异步编程与响应式框架 深入学习Windows Phone7(一

    1.6K80发布于 2018-01-22
  • 来自专栏网管叨bi叨

    事件驱动编程解救臃肿的代码

    在这篇文章中我们将了解到什么是“事件驱动编程”以及在Laravel中如何开始构建一个事件驱动应用,同时我们还将看到如何通过事件驱动编程来对应用程序的逻辑进行解耦。 在开始之前,先说明一下这篇文章主要是阐述事件驱动这种编程思维和理念的,所以不会涉及到Laravel Events的方方面面。 何为事件驱动编程 在我们深入事件驱动应用之前,我们先看一下在维基百科里对事件驱动编程的定义: 事件驱动编程是一种编程模式,其中的程序流由诸如用户动作(鼠标点击,按键)、传感器输出或来自其他程序/线程的消息等事件来决定确定 为何使用事件驱动编程 我们已经了解事件驱动应用和 LaravelEvents的概念了,你可能会好奇为什么要采用事件驱动这种方法来构建你的应用程序。我们来看一下事件驱动编程带来的收益。 现在让我们看看采用事件驱动编程方法如何实现上述相同的功能。

    2.5K30发布于 2019-10-13
  • 来自专栏Go 技术

    Go 事件驱动编程:实现一个简单的事件总线

    前言在当今微服务和分布式系统盛行的背景下,事件驱动架构(Event-Driven Architecture,EDA)扮演着一个至关重要的角色,此架构的设计使得服务间可以通过事件进行同步或异步通信,替代了传统的直接接口调用 基于事件的交互方式,促进了服务之间的松耦合,提高系统的可扩展性。发布-订阅模式是实现事件驱动架构的模式之一,它允许系统的不同组件或服务发布事件,而其他组件或服务可以订阅这些事件并根据事件内容进行响应。 事件总线事件总线是发布-订阅模式的具体实现,它作为发布者和订阅者的中间件,管理着事件传递与分发,确保事件从发布者顺利地传达到订阅者。 事件总线的方法实现事件总线实现了三个方法,分别为发布事件(Publish)和订阅事件(Subscribe)以及取消订阅事件(Unsubscribe)。 event.Payload)}}()eventBus.Publish("post", eventbus.Event{Payload: map[string]any{"postId": 1,"title": "Go 事件驱动编程

    2.1K74编辑于 2024-05-13
  • 来自专栏Web行业观察

    事件驱动引擎会取代多线程编程

    事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。另外两种常见的编程范式是(单线程)同步以及多线程编程。 网络应用程序通常都有上述这些特点,这使得它们能够很好的契合事件驱动编程模型。 下面客观的谈一下两个经典引擎的区别: 多线程编程的特点 多线程通用用于并发编程,具有多个独立的执行过程。 事件驱动编程的特点 事件驱动编程通常只是用一个执行过程,CPU之间不是并发的,在处理多任务的时候,事件驱动编程是使用协作式处理任务,而不是多线程的抢占式。 事件驱动编程的优势 1.在大部分的应用场景中,事件编程优与多线程编程。 2.相对与多线程编程来讲,事件驱动编程比较容易,复杂度低,是开发者乐于接受的。 3.大多数的GUI框架,都是使用事件驱动编程了架构的。每一个事件会绑定一个Handler,这些事件通常是点击按钮,选择菜单,等等。Handler来实现具体的行为逻辑。

    1.9K40发布于 2018-10-12
  • 来自专栏小工匠聊架构

    异步编程 - 12 异步、基于事件驱动的网络编程框架 Netty

    Netty概述 Netty是一个异步、基于事件驱动的网络应用程序框架,其对Java NIO进行了封装,大大简化了TCP或者UDP服务器的网络编程开发。 Netty框架将网络编程逻辑与业务逻辑处理分离开来,其内部会自动处理好网络与异步处理逻辑,让我们专心写自己的业务处理逻辑。 ,那么会不会导致由于处理队列里面任务耗时太长导致来不及处理连接的读写事件; 第三,多个套接字注册到同一个NioEventLoop的Selector上,使用单线程轮询处理每个套接字上的事件,如果某一个套接字网络请求比较频繁 最后我们看如何把异步调用改造为Reactive编程风格,这里基于RxJava让异步调用返回结果为Flowable,其实我们只需要把返回的CompletableFuture转换为Flowable即可,可以在 } }); return flowable; }); } 如上代码由于CompletableFuture是可以设置回调函数的,所以把其转换为Reactive风格编程很容易

    1.1K20编辑于 2023-09-09
  • 来自专栏渔夫

    事件驱动和消息驱动

    事件驱动和消息驱动 消息驱动事件驱动很类似,都是先有一个事件,然后产生一个相应的消息,再把消息放入消息队列,由需要的项目获取。 事件驱动:鼠标点击产生点击事件后要向系统发送消息 “我点击了” 的消息,消息是主动产生的。再发送到消息队列中。事件往往会将事件源包装起来。 ---- 有时也把事件驱动按照实现方式的不同进行区分(个人并不认为很准确,但是很多人都这么说): 轮询方式 线程不断轮询访问相关事件发生源有没有发生事件,有发生事件就调用事件处理逻辑。 事件驱动方式 事件发生时主线程把事件放入事件队列,在另外线程不断循环消费事件列表中的事件,调用事件对应的处理逻辑处理事件事件驱动方式也被称为消息通知方式,其实是设计模式中观察者模式的思路。 事件驱动模型可以用下图表示(来源于《Software Architecture Patterns》): ?

    5.8K31发布于 2020-04-22
  • 来自专栏C/C++进阶专栏

    基于C++实现的EventLoop与事件驱动编程

    一,概念介绍 事件驱动编程(Event-Driven)是一种编码范式,常被应用在图形用户界面,应用程序,服务器开发等场景。 采用事件驱动编程的代码中,通常要有事件循环,侦听事件,以及不同事件所对应的回调函数。 事件驱动编程经常被应用在前端开发以及C++服务器开发等场景。 Event即事件,是事件驱动编程中的基本处理单元,可以理解为各种各样的信号,对于UI界面来说,鼠标点击、键盘输入、触摸屏输入都可以理解为事件事件循环模式(Event loop)是一种简单且高效的并发编程模式,当前业界有很多主流的C++编程框架比如libevent,libuv,Boost.Asio等都支持事件循环机制。 = event_manager->emit("event2", 20); return 0; } 运行结果: callback1-10 callback2-20 根据以上代码样例,我们发现事件驱动编程通常有以下编码元素

    2.4K10编辑于 2024-05-09
  • Java 异步和事件驱动编程:探索响应式模式

    引言在现代软件开发中,异步和事件驱动编程是提高应用性能和响应性的关键策略。Java 提供了多种机制来支持这些编程模式,使开发者能够构建高效、可扩展的应用程序。 本篇博客将深入探讨 Java 中的异步和事件驱动编程概念,并通过实际示例展示如何应用这些技术。Java 中的异步编程1. Java 中的事件驱动编程1. 事件模型基础监听器模式:组件执行特定操作时会发出事件事件监听器响应这些事件。回调机制:通过注册回调函数,当事件发生时,相关函数被调用。2. 使用事件总线事件总线框架:如 Google Guava 的 EventBus,允许发布和订阅事件,简化事件驱动架构的实现。 ; }}结论Java 的异步和事件驱动编程提供了强大的工具来构建高效、响应式的应用程序。

    90121编辑于 2024-04-28
  • 来自专栏爬虫资料

    理解并应用:JavaScript响应式编程事件驱动编程的差异

    背景介绍在现代JavaScript开发中,响应式编程(Reactive Programming)和事件驱动编程(Event-Driven Programming)是两种非常重要且常用的编程范式。 论证或解决方案事件驱动编程事件驱动编程是一种编程范式,程序的执行流程由事件来控制。JavaScript的事件驱动模型主要体现在浏览器的事件处理和Node.js的事件循环中。 在这个实例中,我们将使用爬虫代理IP来访问目标网站,并通过响应式编程事件驱动编程处理抓取的数据。 结论通过对比可以发现,事件驱动编程和响应式编程各有其特点和适用场景。事件驱动编程简单直观,适合处理单一事件的响应。而响应式编程则更加灵活和强大,适用于复杂的数据流和异步操作。 希望这篇文章能帮助您更好地理解和应用JavaScript中的响应式编程事件驱动编程

    70810编辑于 2024-06-17
  • 来自专栏aardio

    aardio 事件驱动

    事件驱动编程今天开始学习事件驱动编程,突然觉得编程就像一场音乐会——每个程序组件都是乐器,而“事件”就像指挥棒的挥动,只有被触发时才会演奏。这种编程模式让程序能根据用户操作、系统状态变化做出响应。 一、事件绑定基础事件绑定的关键是把事件和处理函数关联起来,我在aardio里试了两个例子: 示例1:按钮点击事件绑定 import win.ui;/*DSG{{*/var winform = win.form 这里用onClose绑定事件,通过message参数判断是否为关闭事件(0x10是Windows消息中的WM_CLOSE)。 二、自定义事件”系统事件不够用?那就自己定义! 三、事件队列管理事件太多时,需要按顺序执行——这就是事件队列的作用。 这里我用eventCount记录事件编号,每次添加事件时动态创建函数! 今日总结事件驱动编程的核心是“事件触发-函数响应”模式。

    28810编辑于 2025-06-26
  • 来自专栏有文化的技术人

    Redis事件驱动

    但是这样原先的执行流程就没法还原了,因此,我们可以利用事件驱动的方式,要求线程在退出之前向 event loop 注册回调函数,这样 IO 完成时 event loop 就可以调用回调函数完成剩余的操作 事件类型 Redis 中事件主要有两种类型: 文件事件 ( file event ) : Redis 文件事件一般都是 套接字的 读写状态监控,然后回调相应接口进行处理 时间事件 ( time event ) : 时间事件则是维护一个定时器,每当满足预设的时间要求,就将该时间事件标记为待处理,然后在 Redis 的事件循环中进行处理。 Redis 对于这两种事件的处理优先级是 文件事件优先于时间事件 文件事件 文件事件的结构体为 typedef struct aeFileEvent { // 文件事件类型 AE_READABLE / 下一个时间事件 struct aeTimeEvent *next; } aeTimeEvent; 时间事件为一个双向链表 这些事件都存在于一个aeEventLoop的结构体内 事件事件池状态结构体为

    85120编辑于 2022-10-27
  • 来自专栏黑光技术

    事件驱动架构

    原文在这里: https://dzone.com/articles/need-for-event-driven-architecture 为什么需要事件驱动架构和事件消息传递 开发微服务,我们必须处理分布式数据管理的问题 事件驱动架构 对于大多数应用,让微服务工作并且管理好分布式数据的方式就是采用事件驱动架构。已经有多种可用模式,我们本次聚焦于非常常用的模式:事件消息传递。 事件消息传递 事件驱动架构被叫做消息传递系统。一个消息简单来说就是一个事件,反之亦然一个事件也可以是一个消息。一个事件驱动系统时说:所有的模块都应该被事件通知,从而驱动系统模块工作。 所以早起的实时事件驱动系统被定义为发布/订阅模式。 发布/订阅模式是另一种描述基于事件消息传递的方式。在发布/订阅方式中有发布者和订阅者。一个发布者不需要知道订阅它发布消息的任何信息。 总结 这篇文章,讨论了在微服务中分布式数据管理的挑战和事件驱动架构使用消息传递模式如何帮助解决这些问题。 看完本文有收获?请分享给更多人 关注「黑光技术」加星标,关注大数据+微服务

    1.5K10发布于 2019-05-06
  • 来自专栏小工匠聊架构

    EDA - 初探事件驱动

    ---- 事件驱动架构概述 事件驱动架构(Event-Driven Architecture,简称EDA)是一种软件架构模式,它将系统中的各种组件之间的通信和协作建立在事件的概念之上。 在事件驱动架构中,系统中的各个部分可以产生、发布、捕获和响应事件,这些事件可以是状态变化、用户操作、消息等等。 事件驱动架构的主要思想是通过事件来触发和协调不同组件的行为,使系统更加灵活、松耦合和可扩展。 为了防止我们的代码变成一堆复杂的逻辑,我们应当在某些明确场景下使用事件驱动架构。 ---- 事件驱动架构的四种模式 事件通知 优点 架构更健壮。 但是在事件驱动架构中,可以通过事件溯源将包含修改的内容存入到事件里。 ---- 抽象模型设计

    1.3K20编辑于 2023-09-07
  • 来自专栏JAVA乐园

    Spring 事件驱动模型

    0x01:spring事件驱动组成 spring事件驱动由3个部分组成 ApplicationEvent:表示事件本身,自定义事件需要继承该类。 用来定义事件 ApplicationEventPublisherAware:事件发送器,需要实现该接口。主要用来发布事件。ApplicationContext 也实现了该接口,可以用于发布事件。 但是注意此时,方法参数不能有多个,否则会发生转换异常,可以将使用多个事件的父类作为唯一的方法参数来接收处理事件,但除非必要否则并不推荐监听多个事件的发布。 一个事件可以同时被多个监听处理类监听处理。 默认情况下事件是同步的,即事件被 publish 后会等待 Listener 的处理。如果发布事件处的业务存在事务,监听器处理也会在相同的事务中。 @TransactionalEventListener 和 @EventListener 都可以监听事件,但前者可以对发布事件和监听事件进行一些事务上的隔离。

    1.9K20发布于 2021-06-25
  • 来自专栏sktj

    python 事件驱动 asyncio

    1 Asyncio loop = get_event_loop(): 得到当前上下文的事件循环。 loop.call_soon(callback, argument): 尽可能快调用 callback, call_soon() 函数结束,主线程回到事件循环之后就会马上调用 callback 。 asyncio.set_event_loop(): 为当前上下文设置事件循环。 asyncio.new_event_loop(): 根据此策略创建一个新的时间循环并返回。

    84110编辑于 2022-01-09
领券