问题标签 [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 回答
233 浏览

javascript - 使用事件在视图设计模式之间进行通信

当您有一个引用另一个视图并侦听其事件的视图时,事件处理程序很好,这非常适合解耦和可重用性。

但问题是有时我有未引用的视图,所以我使用事件聚合器,它是一个全局通知来了解是否发生了某些事情......但是当我只想听我无法引用的孩子的观点时,这似乎不对,比如DOM 层次结构中的冒泡事件。

但让我说我有一个视图层次结构,如:

  • 父视图
    • 子视图
      • 子视图
        • 模态视图

我想知道当 ModalView 触发事件时在ParentView中...我不能使用事件冒泡,因为ModalView不在同一个 DOM 层次结构中,所以在这种情况下我应该使用 Event Agregator 还是其他什么?我真的希望那个事件泡沫适合我的情况。

0 投票
1 回答
7048 浏览

javascript - 在 Angular.js 应用程序中进行事件驱动开发的最佳实践是什么?

我正在向我们的 Angular 应用程序添加一些 websocket 功能。Websocket 对象被包装在一个服务中。理想情况下,我们希望我们包装的套接字对象有一个标准的事件 API,以便我们可以在控制器中使用它,如下所示:(抱歉,Coffeescript)

我们实现这一目标的最佳实践/库是什么?使用jQuery?Backbone.Events?任何建议都会有所帮助。谢谢!

0 投票
1 回答
306 浏览

c - 多处理器架构中的状态机事件生成

目前,我正在与一位同事进行小型架构争论。我希望你们中的一些人可以通过强烈建议一种方法而不是另一种方法来帮助解决它。

我们有一个 DSP 和 Cortex-M3 与共享内存耦合在一起。DSP 接收来自外部世界的请求,其中一些请求将执行某些只能在 CM3 上完成的无线测试功能。DSP 写入共享内存,然后通过中断向 CM3 发送信号。共享内存指示请求是什么以及执行请求所需的任何必要数据(调谐到的通道、要读取的 RF 芯片的寄存器等)。

我的偏好是为中断中可能发生的每个请求生成一个唯一的事件 ID 。然后在离开中断之前将事件传递到状态机的事件队列,该队列将在专用于 RF 活动的线程中处理。

相反,我的同事希望将单个事件 ID(通用 RF 命令)传递给状态机,并在状态机中接收到此事件 ID 后对共享内存区域进行解析。解析后,您将知道需要执行的特定命令。

我不喜欢这种方法,因为您将在您碰巧处于的任何状态下解析共享内存。您可以将其设为函数,但它仍然是应该与状态无关的处理。她不喜欢在中断中解析共享内存的想法。

对更好的方法有何评论?如果有帮助,我们将使用 Miro Samek 的 QP 框架来实现状态机。

编辑:将状态图移至ftp://hiddenoaks.asuscomm.com/Statechart.bmp

0 投票
2 回答
499 浏览

asp.net - 节点中使用的基于事件的模型是否与 C# 应用程序中使用的基于事件的模型相同?

我听说过 node.js 和基于事件的编程以及诸如节点事件循环之类的东西。在大学时,我记得我制作了一个 ASP.net Web 应用程序。教授说,ASP.net 使用基于事件的架构,服务器端的回调函数由客户端的不同事件触发。

这两种不同的技术是否使用事件和事件驱动编程的概念?

0 投票
1 回答
509 浏览

soa - 事件驱动架构——服务契约设计

我很难将我的需求概念化为适合我们新生的 SOA/EDA 的东西

我们有一个组件,我将其称为数据下载器。这是具有高延迟和与每个请求相关的成本的外部数据提供者的外观。我想使用这个组件并通过明确的合同定义从中创建一个可重用的服务。由我决定该合同应如何运作,但其责任有两个:

  1. 为即将进行的预定下载维护参数列表(称为下载定义)
  2. 管理与外部服务通信的技术细节

基本上,它管理通信的“方式”。'what' 和 'when' 是另外两个组件的职责:

  • “什么”由负责确定下载参数的“客户”管理。

  • “何时”由专用调度组件管理。由于与下载相关的成本,我们希望在当天批量处理请求。

希望这个序列图能够解释服务的职责:

因为每个职责都分为三个不同的组件,所以我们会通过异步消息获得各种潜在的竞争条件。例如,当调度程序告诉下载程序完成它的工作时,因为“附加到下载定义”命令是异步的,所以不能保证来自客户端 A 的未决请求实际上已得到服务。但这一切对我来说都是高耦合的。为什么调度程序必须知道在调用下载之前需要执行的任何“先决条件”客户端请求?

我们尝试过的一些潜在解决方案:

  • 使“附加到下载定义”命令成为阻塞请求/响应操作。但这会破坏性能。拥有 EDA 的可扩展性优势

  • 在下载器中构建一些东西,以确保它仅在其传入请求队列中没有挂起的命令时运行。但这会引入对我也不喜欢的底层消息传递基础架构的依赖。

让我觉得我正在以一种完全落后的方式思考这个问题。或者这只是一个经典案例,有人试图将同步 RPC 需求融入异步事件驱动架构?

0 投票
1 回答
41 浏览

node.js - 使用回调中的值

我正在使用 ExpressJS 在 Node.js 中开发应用程序。我是事件驱动开发的新手,我有一个关于事件驱动架构和可见性的基本问题。

我有一项服务需要进行多个 MySQL 查询并将它们作为一个 JSON 对象返回。像这样的东西:

我怎样才能做到这一点?

0 投票
1 回答
13757 浏览

java - 回合制游戏设计:事件驱动与游戏循环

我正在用 Java 创建我的第一个游戏。游戏是大富翁。我正在努力设计游戏以模拟其基于回合的结构(管理玩家回合)。我想允许一个人控制的玩家和一个或多个人工智能控制的玩家玩游戏。

我的具体问题是我不知道是否实现游戏循环,即可以管理玩家和与大富翁游戏直接相关的变量的循环,(想想诸如提示每个玩家轮到他们的事情,增加轮到下一个玩家,或者从每个玩家那里得到骰子——依次)。我并不是指“游戏循环”一词的更底层含义,它更多地涉及在屏幕上绘制帧、更新物理或以特定时间速率更新 AI。

我的理解是,我尝试实现我需要的选择是:

  1. 实现一个完全由事件驱动的程序,它没有这样的游戏循环,或者
  2. 实现一个游戏循环——在后台长时间运行并且只要游戏运行就基本上永无止境的东西。这将是更程序化的方法。

当我第一次开始尝试解决这个问题时,我遇到了 UI 冻结的问题,因为我的游戏循环永无止境并且完全消耗了它正在运行的线程(我只是做了一个非常简单的 while 循环来说明这一点) . 所以我努力创建一个SwingWorker来封装我的游戏循环。这解决了 UI 冻结的问题,但仍然让我想知道我是否走错了路。

作为一般规则,我发现网络上的大多数建议似乎都倾向于任何事件驱动的方法,因此我当前使用 a 的实现SwingWorker可能是朝着错误方向迈出的一步。但我无法完全掌握如何为这个特定任务实现一个完全事件驱动的系统(意味着不存在游戏循环)。在我看来,必须在某个地方存在一个循环来管理玩家回合。

以下是我的具体问题:

  1. 游戏循环(正如我所描述的那样)是否适用于诸如大富翁之类的回合制游戏 - 特别是用于排队玩家转弯并提示合适的玩家轮到他们,一次一个玩家(并排队整个过程/序列包括转弯的步骤)?
  2. 如果要创建一个纯粹的事件驱动系统来管理玩家回合,你如何迭代每个玩家以提示他们轮到他们并继续迭代直到游戏结束?
  3. 如果要使用游戏循环来解决上述特定问题,它是否必须在自己的线程中运行(可能使用SwingWorker)以避免冻结 UI?我的情况是特定于 Java 的,但我想我也会对非 Java 特定情况的答案感兴趣。

目前,我使用 MVC 模式组织了我的代码。我的控制器是我的游戏循环(实际SwingWorker线程)所在的位置。它远未完成,但它有助于说明我如何在我所谓的“游戏循环”中管理玩家回合。

SwingWorker来自控制器的代码:

0 投票
1 回答
2596 浏览

java - Netty 有哪些 Servlet 容器

我想为自己构建一个基于 Web 的聊天应用程序(例如 hipchat 或 facebook 聊天),我认为 netty 是这种方式,因为它是事件驱动的,但是。Netty 没有任何 servlet 容器。那么如何为 netty 构建自己的 servlet 容器呢?或者更好的是如何构建自己的 ServletContainer?

0 投票
1 回答
141 浏览

javascript - JavaScript 文件的结构和 Modernizr/yepnope

我正在使用 Modernizr 和 yepnope.js 研究整个异步脚本加载,我想知道如何调整我的应用程序结构以使用异步脚本加载。

现在的结构类似于这样:

此代码位于require整个应用程序中的 header.php 文件中。在文档正文部分(其他 PHP 文件)中,我可能有一些 JavaScript 文件,如下所示:

这是 moduleA.js 和 someScripts.js 可以包含的简化示例:

还有一些Scripts.js:

如果我使用的是 Modernizr,我会在页面顶部删除其他插件脚本,并在 global.js 中写:

如何保证 myCoolPlugin 在执行 moduleA.js 和 someScripts.js 时已加载?我意识到我可以用 将插件初始化包装在这些文件中Modernizr.load(),但这似乎是不必要的代码重复。

0 投票
0 回答
67 浏览

event-driven - 如何设置控制器模块以向 SystemC 中另一个模块的多个实例发送/接收事件/通知?

我有两个用 SystemC 编写的模块,第一个称为“工人”,另一个称为“老板”。在 sc_main 中,我动态生成随机数量的工人。我希望每个人通知老板模块它已经开始/完成工作。同时我想让boss模块给每个人发送一个通知去做某事。

进行这种多重设置的最佳方法是什么?显然,共享全局 sc_event 变量不是最佳方法,尽管它目前有效。

我必须为每个工人/老板设置一个外部中断吗?

有没有一种方法可以让所有员工(不管他们随机生成的数字如何)与老板沟通而不会错过任何事件并使用可靠但简单的设置。老板如何单独向选定的工人发送事件。

我读到有一个主从库。这能解决问题吗?我在哪里可以找到它?

谢谢