标签: event-driven

事件驱动编程是如何实现的?

我正在研究twisted和node.js框架是如何工作的,我试图准确理解操作系统如何使用回调支持I/O操作.

我理解这很好,因为我们需要更少的线程,因为我们不需要阻塞线程等待I/O操作.但是一旦I/O完成,就必须调用回调.

这是如何通过操作系统实现的?

io networking asynchronous event-driven nonblocking

6
推荐指数
1
解决办法
1509
查看次数

事件/观察者驱动Ruby on Rails

我有一个适用于事件/监听器模型的应用程序.发布了几种不同类型的数据(事件),然后许多不同的事情可能需要或可能不需要对该数据(侦听器)采取行动.听众不需要特定的顺序,每个听众都会决定是否需要对事件采取行动.

Rails应用程序有哪些工具可以完成这项任务?我希望自己不必这样做(虽然,我可以.这不是什么大不了的事.)

编辑:观察者模式可能是更好的选择

ruby event-driven listener ruby-on-rails-3

6
推荐指数
2
解决办法
9166
查看次数

帮助事件驱动的TCP服务器

我正在开发一个"应用程序系统",我还需要创建一个服务器应用程序.我在C#(.NET 4.0)工作.服务器将主要收集来自不同POS应用程序/客户端的数据(应该是大约50-100,但服务器应该能够处理大约200-300个客户端).从单个客户端,服务器可能每天大约100x次接收大约1KB.服务器主要需要接受数据,解密并将其存储到磁盘.它还应该检查特定目录中的更改,以便向客户端发送新配置,这不应该经常发生.

我对C#和服务器编程很陌生,所以请耐心等待.我考虑过使用线程池和异步方法(在一本书中简单地使用了一个很好的例子"C#").但我花了很多时间寻找最佳解决方案,我发现了这一点.但在我的情况下,多线程带来的问题多于好处.因此我想到了甚至驱动服务器."一个进程,在回调中处理每个事件(接受的连接,可读取的数据,可以写入客户端,......)." 来自" 什么是事件驱动的Web服务器 ".我发现这是我问题的最佳解决方案.

但我不知道如何编码,我找不到任何关于事件驱动服务器的例子.据我所知,我应该创建一个线程(GUI为+ 1),然后创建一个TCP侦听器然后以某种方式创建事件,以便当TCP侦听器可以接受客户端时,事件将触发并唤醒服务器,同样在数据时从客户端读取将可用它将唤醒服务器.

请帮我编代码,我完全迷失了.我知道如何使用它

while(true)
{
   check if client wants to connect
        accept client and add it to client list
   iterate through client list and check if anyone is sending data ...
        accept data and store it
   ...
  }
Run Code Online (Sandbox Code Playgroud)

但这不是事件驱动的,而是在浪费CPU.服务器不会非常活跃,所以我想让它尽可能高效.

一些例子真的会有所帮助.

谢谢你的时间和答案.

ps我可以只为所有客户端使用一个端口吗?

编辑:为了澄清,我想编写一个事件驱动的服务器,但我不知道如何,因此我只是做了一个我知道的例子(客户端轮询).

c# tcp event-driven

6
推荐指数
1
解决办法
8964
查看次数

Android smoothScrollTo不调用onScrollStateChanged

smoothScrollBy()用来滚动到一个特定的位置ListView.我希望在ListView完成滚动时得到通知,将其与onScrollStateChanged()当用户用手指滚动时触发的当前事件集成.

目前我使用的Timer是在平滑滚动的持续时间之后运行100ms,但这不是我喜欢的事件驱动.

android listview scroll event-driven

6
推荐指数
1
解决办法
5629
查看次数

创建一个简单的事件驱动架构

目前在项目上遇到一些麻烦.我正在实施一个游戏,我想让它以事件为导向.

到目前为止,我有一个EventHandler类,它具有重载方法,具体取决于生成的事件类型(PlayerMove,Contact,Attack等)

我将有游戏驱动程序或类生成事件.我的问题是如何在不将事件生成类紧密耦合到事件处理程序并使EDA冗余使用的情况下如何有效地处理事件?

我想设计自己的简单处理程序,而不是使用内置的Java处理程序

java architecture events event-driven

6
推荐指数
1
解决办法
1万
查看次数

等待阻塞集合(队列)在C#中减小

我正在使用以下工作流程开展项目:

第一部分:

  • 事件异步到达并在阻塞队列中排队,我们称之为Q1
  • 线程从该队列中获取下一个可用项
  • 项目最终并行运行{N}个任务
  • 每个任务将其结果排队到第二个队列,我们​​称之为Q2.
  • 处理完项目后,将从队列中读取下一个项目.

第二部分:

  • 另一个线程一次读取Q2一个对象并处理结果

因此,问题在于,第一个队列中的每个项目最终并行运行大量任务,并且每个任务将其结果排队.第二个队列必须连续处理,一次一个项目,然后它被淹没.


我的问题

我需要一种机制,使线程处理Q1等待,直到Q2中的项数低于特定的阈值.实现这一目标的最佳方法是什么?有没有办法让事件驱动的解决方案而不是轮询解决方案?

.net c# queue multithreading event-driven

6
推荐指数
1
解决办法
1180
查看次数

RabbitMQ和Sails.js

我在使用带有Sails应用程序的RabbitMQ时遇到了麻烦.我不确定订户代码的放置位置.我正在尝试建立一个通知系统,以便当管理员批准用户的数据请求时,用户的仪表板将弹出类似于Facebook弹出通知的通知.问题是,将用户代码放在仪表板控制器的显示路径中似乎永远不会抓取已发布的消息.

任何建议将不胜感激.目前使用rabbit.js包连接到RabbitMQ.

messaging event-driven rabbitmq node.js sails.js

6
推荐指数
1
解决办法
1697
查看次数

事件驱动架构的 API 网关

我们正在尝试将我们的单体核心拆分为微服务,并添加一些使用消息系统(例如 Kafka)相互连接的新服务。

下一阶段是创建 API 端点,以便通过 Api 网关在移动应用程序和微服务之间进行通信。

开发 API 网关以向/从微服务传输数据的好解决方案是什么?

  1. 使用消息系统作为请求-回复之一(将 API 网关上的请求转换为消息命令,等待来自带有状态或必要数据的消息系统的响应)?
  2. 在必要的微服务上创建 REST 端点(例如使用REST.li)以通过网关发送或获取数据;使用消息系统根据微服务产生的事件来保持数据的一致性?

感谢您的建议和一些想法

rest soa event-driven microservices

6
推荐指数
1
解决办法
1335
查看次数

如何在事件驱动的微服务架构中查询?

假设基于CQRS架构的以下简单UC:

我们有一个管理商业对象的后端,让电影说.

  • 该后端由2个微服务组成:CommandManager(创建/更新/删除电影)和QueryManager(查询电影)
  • 我们有一个前端,提供用于创建新电影的网页,此操作自动引导到描述电影的另一个网页.

一个简单的方法是:

  • 网页使用表单收集电影信息并将其发送到前端.
  • 前端向CommandManager发出POST请求
  • CommandManager将新影片写入数据存储区并返回影片键
  • 前端使用此键对QueryManager进行GET
  • QueryManager使用密钥在数据存储区中查找电影并将其返回.
  • 前端提供带有电影信息的页面.

好的,现在我想以更多的事件驱动方式转换这个UC.这是新的流程:

  • 网页使用表单收集电影信息并将其发送到前端.
  • 前端使用新电影信息在BUS中写入消息
  • CommandManager侦听总线并在数据存储区中创建新电影.最终,它在BUS中发布一条新消息,指定已创建新电影.

此时,由于这种流是异步的,因此前端不再等待响应.我们如何完成此流程以将用户转发到电影信息网页?在查询QueryManager之前,我们应该等待创建过程完成.

在一个更通用的术语中,在基于总线/事件的异步架构中,如何执行用于在网页中提供信息的Query?

event-driven cqrs microservices

6
推荐指数
1
解决办法
1133
查看次数

域事件是否可以在不属于聚合状态更改 (DDD) 的情况下发出

我想知道如果域事件不是聚合状态更改的自然结果,如何实现它(在 DDD 中)。

我借用这篇文章的例子。

因此,假设我们需要一个像:TemperatureWasMeasured这样的事件,它可能是我们所做的某些建模的产物(例如在事件风暴会话中)。

此事件感觉像是某些读取操作的产物,而不是某些聚合的实际状态更改。

所以问题是: 这个事件在哪里以及如何有意义地被发射?

我们可以创建一个实体或聚合,它可以有一个状态来计算读取次数,以便作为状态更改发出。但这真的有必要吗?

在现有的资源中,“领域事件”的定义似乎没有提到状态变化,而只是在领域中发生了一些事情。

那么测量的动作(在非量子力学环境中)被认为是一个域事件,就像TemperatureWasMeasured事件一样?

如果有人能澄清这些问题那就太好了,因为似乎没有明确的答案。

events domain-driven-design aggregate event-driven domain-events

6
推荐指数
1
解决办法
446
查看次数