问题标签 [event-driven-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1106 浏览

spring - Spring Integration - 最大吞吐量消费者

Spring Integration 元素的配置(如果有)将支持以下模型:

  • 一个消息队列,代表传入的工作
  • 从该队列读取的多个消费者(一条消息只需要发送给一个消费者)
  • 每个消费者只有在无事可做时才进行轮询;如果它当前正在处理消息,则不要轮询。如果它没有工作,则每隔 X 秒轮询一次以查看是否有新工作到达。
0 投票
2 回答
257 浏览

javascript - 如何制定 node.js 运行时策略?

Node.js 方法是事件驱动的,我想知道您将如何解决何时触发事件的问题?

假设我们在 Web 应用程序上有一些操作:创建一些数据、提供页面、接收数据等。

你会如何安排这些活动?在线程系统中,设计相当“简单”。您将线程专用于特定的任务集,然后走上线程同步的道路。虽然这些任务的需求量很低,但线程处于空闲状态,什么也不做。当需要他们时,他们会运行他们的代码。虽然这条路有问题,但它有据可查,并且得到了解决。

我发现很难理解 node.js 事件的处理方式。我有 10 个请求进来,但我没有创建任何数据,所以我无法提供任何服务,创建数据是一个漫长的操作,另外 5 个客户端想要发送数据。现在怎么办?

我创建了以下未经测试的代码,它基本上是一堆注册并应该执行的回调。将会有某种桩管理器将运行并决定它现在要执行哪些代码。该回调创建的所有回调都可以“自然地”添加到偶数循环中。它还应该注册它自己,以便事件循环可以将控制权交还给它。其他的东西,比如静态内容和任何可以以不同方式绑定的东西。

  1. 如何将回调注册为当前事件循环状态中的最后一个调用?
  2. 这是解决这个问题的好方法吗?
0 投票
2 回答
397 浏览

nservicebus - EDA:“级联”事件还是显式命令?

设想

假设我有一个系统的三个主要组件:

  1. UI - 收集来自用户的输入并创建通过消息总线发送的LoginUserCommand 。然后,用户界面侦听此消息总线以获取MessageReceivedEvent(s)

  2. 用户服务- 接收LoginUserCommand并引发UserLoggedInEvent。这里的关键部分是消息服务需要被告知开始接收消息。

  3. 消息服务-为登录用户引发MessageReceivedEvent(s) 。

选项

我的设计问题是关于User ServiceMessage Service之间的交互。

当用户登录时,需要发生许多事情——服务需要协调,以便 UI 开始接收消息。

我是不是该...

  • 用户服务是否引发了UserLoggedInEvent并让消息服务监听此事件并执行用户接收消息所需的工作?

...或者...

  • 用户服务是否引发了一个UserLoggedInEvent但然后创建一个命令 - StartMessageReceivingCommand并将其显式发送到消息服务

问题

每种方法的优点/缺点是什么?(级联事件与显式命令)。还有其他选择吗?

0 投票
1 回答
277 浏览

javascript - node.js 返回客户端等待事件

我在 node.js 上玩了一下 Comet 的概念,但我仍然有点困惑,我想知道这里是否有人能指出我正确的方向。

考虑一个游戏应用程序,其中客户端代码应该要求轮到它采取行动(例如在国际象棋应用程序上)。我在这里的想法是使用这样的东西:

当比赛开始时,节点服务器上的一个方法被调用以在 match 数组上创建一个元素,其中包含比赛的 id 和初始玩家。

当玩家移动时,会调用一个方法来更新引用此匹配的数组元素上的当前玩家。此方法应在更改发生时触发事件。

在能够进行任何移动之前,客户端代码应该调用服务器上的一个方法来检查是否轮到用户,如果不是轮到则等待更改的玩家事件。

我不确定这是否是事件循环中的一个好方法,如果是,我不知道如何使该方法等到事件返回。

有什么建议么?

0 投票
2 回答
1293 浏览

multithreading - 为什么线程如此昂贵,事件驱动的非阻塞 IO 在基准测试中更好

我最近开始学习 node.js,这是一个基于 V8 的 JavaScript 库,以其非阻塞 IO 和令人难以置信的速度而闻名。

据我了解,节点不会等待 IO 响应,而是运行一个事件循环(类似于游戏循环),不断检查未完成的操作并在 IO 响应后立即继续/完成它们。节点性能与 Apache HTTPD 相比,节点速度明显更快,同时使用更少的内存。

现在,如果您阅读有关 Apache 的信息,您会了解到它每个用户使用 1 个线程,这可能会显着减慢它的速度,这就是我的问题出现的地方:

如果将线程与节点在其事件循环中内部执行的操作进行比较,您会开始看到相似之处:两者都是等待资源响应的未完成进程的抽象,都检查操作是否定期进行,然后不占用CPU 一段时间(至少我认为一个好的阻塞 API 在重新检查之前会休眠几毫秒)。

现在,使线程变得如此糟糕的显着关键差异在哪里?

0 投票
2 回答
3791 浏览

java - Java——事件处理设计

我正在尝试开发一个基于处理某些事件和生成数据的系统。每个事件将包含(可能)几个不同的字段,每个侦听器将处理一些或它们。我有以下两种方法

  1. 在事件生成类中,我将注册多个事件侦听器,每个侦听器侦听事件特定字段的一个特定值,例如:

    /li>

这很诱人,因为处理是在对象本身内部完成的,并且没有集中处理事件,而是允许每个对象处理信息。缺点(可能是致命的)是每个事件(几十万个)都必须广播给所有听众,而实际上只有一小部分会做某事。从长远来看,它可能会产生巨大的性能冲击......

  1. 一个集中式侦听器,它将侦听所有事件并对其采取行动,并将处理委托给相应的事件处理器,例如:

    /li>

这会更快,但是对于事件的任何其他部分,例如检查事件ID等的处理器,它需要单独的映射或处理器集合。方法1中不是这种情况。因为我们将简单地生成另一组侦听器并注册他们与事件生成类。

你们怎么看这些?它们有意义吗,还是您宁愿建议完全不同的东西?

0 投票
5 回答
3642 浏览

design-patterns - 使用 Actor 的设计模式

基于演员的范式非常酷。它的有效扩展能力使其成为必须评估任何并发系统的范例。我已经阅读了一些关于它的内容,并且对核心意图有一个不错的想法:使用消息和多个“参与者”驱动昂贵的操作,以最大限度地减少由于请求/响应交互引起的等待,从而提高系统的吞吐量。然而,我还没有充分了解人们与演员一起使用的设计模式。我正在寻找基于演员的系统的设计模式。

演员设计模式的一个常见例子是一个系统,其中有一个主协调演员和一群童工演员。他们掌握将昂贵的操作映射到较小的块,将较小的块作为消息发送给一群工人,等待他们的响应,然后将它们全部归结为结果。在这种模式的一些复杂示例中,worker actor 通知 master 他们已准备好进行更多工作,并且 master 会按需路由给他们更多工作。这确保了工作的适当平衡,并且在工作规模变化很大时很有用。

我四处搜索有关更多基于演员的模式的文献,但除了上述示例外,还找不到任何示例。我还没有浏览 Akka Actors 项目示例,但任何指针都会非常有用。

0 投票
2 回答
9481 浏览

listener - 轮询和事件驱动编程对于同一种技术是不同的词吗?

我研究了中断与循环轮询,并了解了不必等待轮询的中断的优点。在我看来,轮询就像事件驱动编程,或者至少类似于监听器,而轮询的作用实际上很像监听输入或输出。您同意还是我误解了轮询(循环侦听)和事件驱动编程(也与所谓的侦听器一起侦听)之间的任何关键区别?

0 投票
1 回答
143 浏览

c++ - 从函数指针向量调用成员函数的函数指针

我认为这主要是一个语法错误(虽然在编译期间没有捕获,但只有在运行时才会发生错误)

我正在尝试开发一个事件驱动的架构,在其中我保留一个 eventReceiver 的向量并尝试从该向量中调用它们。

通用IO.h

通用IO.cpp

主文件

主文件

异步进程调用incomingMsgReceived 函数

该程序编译得很好..但是在:listenersi; 线。什么是正确的语法?

0 投票
4 回答
21658 浏览

c - c语言中的事件驱动设计

这是一个小小的理论问题。想象一个装满传感器的设备。现在,如果传感器 x 检测到某些东西,应该会发生一些事情。同时,如果检测到其他东西,比如两个传感器检测到两个不同的东西,那么这个设备的行为必须不同。

从 webdesign (so javascript) 我了解了事件,例如 (使用 jquery)$(".x").on("click", function(){})或从 angularjs $scope.watch("name_of_var", function())

是否有可能在不使用复杂库的情况下在 C 中复制这种行为?

谢谢。