我正在研究twisted和node.js框架是如何工作的,我试图准确理解操作系统如何使用回调支持I/O操作.
我理解这很好,因为我们需要更少的线程,因为我们不需要阻塞线程等待I/O操作.但是一旦I/O完成,就必须调用回调.
这是如何通过操作系统实现的?
我有一个适用于事件/监听器模型的应用程序.发布了几种不同类型的数据(事件),然后许多不同的事情可能需要或可能不需要对该数据(侦听器)采取行动.听众不需要特定的顺序,每个听众都会决定是否需要对事件采取行动.
Rails应用程序有哪些工具可以完成这项任务?我希望自己不必这样做(虽然,我可以.这不是什么大不了的事.)
编辑:观察者模式可能是更好的选择
我正在开发一个"应用程序系统",我还需要创建一个服务器应用程序.我在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我可以只为所有客户端使用一个端口吗?
编辑:为了澄清,我想编写一个事件驱动的服务器,但我不知道如何,因此我只是做了一个我知道的例子(客户端轮询).
我smoothScrollBy()
用来滚动到一个特定的位置ListView
.我希望在ListView
完成滚动时得到通知,将其与onScrollStateChanged()
当用户用手指滚动时触发的当前事件集成.
目前我使用的Timer
是在平滑滚动的持续时间之后运行100ms,但这不是我喜欢的事件驱动.
目前在项目上遇到一些麻烦.我正在实施一个游戏,我想让它以事件为导向.
到目前为止,我有一个EventHandler类,它具有重载方法,具体取决于生成的事件类型(PlayerMove,Contact,Attack等)
我将有游戏驱动程序或类生成事件.我的问题是如何在不将事件生成类紧密耦合到事件处理程序并使EDA冗余使用的情况下如何有效地处理事件?
我想设计自己的简单处理程序,而不是使用内置的Java处理程序
我正在使用以下工作流程开展项目:
第一部分:
第二部分:
因此,问题在于,第一个队列中的每个项目最终并行运行大量任务,并且每个任务将其结果排队.第二个队列必须连续处理,一次一个项目,然后它被淹没.
我的问题
我需要一种机制,使线程处理Q1等待,直到Q2中的项数低于特定的阈值.实现这一目标的最佳方法是什么?有没有办法让事件驱动的解决方案而不是轮询解决方案?
我在使用带有Sails应用程序的RabbitMQ时遇到了麻烦.我不确定订户代码的放置位置.我正在尝试建立一个通知系统,以便当管理员批准用户的数据请求时,用户的仪表板将弹出类似于Facebook弹出通知的通知.问题是,将用户代码放在仪表板控制器的显示路径中似乎永远不会抓取已发布的消息.
任何建议将不胜感激.目前使用rabbit.js包连接到RabbitMQ.
我们正在尝试将我们的单体核心拆分为微服务,并添加一些使用消息系统(例如 Kafka)相互连接的新服务。
下一阶段是创建 API 端点,以便通过 Api 网关在移动应用程序和微服务之间进行通信。
开发 API 网关以向/从微服务传输数据的好解决方案是什么?
感谢您的建议和一些想法
假设基于CQRS架构的以下简单UC:
我们有一个管理商业对象的后端,让电影说.
一个简单的方法是:
好的,现在我想以更多的事件驱动方式转换这个UC.这是新的流程:
此时,由于这种流是异步的,因此前端不再等待响应.我们如何完成此流程以将用户转发到电影信息网页?在查询QueryManager之前,我们应该等待创建过程完成.
在一个更通用的术语中,在基于总线/事件的异步架构中,如何执行用于在网页中提供信息的Query?
我想知道如果域事件不是聚合状态更改的自然结果,如何实现它(在 DDD 中)。
我借用这篇文章的例子。
因此,假设我们需要一个像:TemperatureWasMeasured这样的事件,它可能是我们所做的某些建模的产物(例如在事件风暴会话中)。
此事件感觉像是某些读取操作的产物,而不是某些聚合的实际状态更改。
所以问题是: 这个事件在哪里以及如何有意义地被发射?。
我们可以创建一个实体或聚合,它可以有一个状态来计算读取次数,以便作为状态更改发出。但这真的有必要吗?
在现有的资源中,“领域事件”的定义似乎没有提到状态变化,而只是在领域中发生了一些事情。
那么测量的动作(在非量子力学环境中)被认为是一个域事件,就像TemperatureWasMeasured事件一样?
如果有人能澄清这些问题那就太好了,因为似乎没有明确的答案。
events domain-driven-design aggregate event-driven domain-events
event-driven ×10
c# ×2
events ×2
.net ×1
aggregate ×1
android ×1
architecture ×1
asynchronous ×1
cqrs ×1
io ×1
java ×1
listener ×1
listview ×1
messaging ×1
networking ×1
node.js ×1
nonblocking ×1
queue ×1
rabbitmq ×1
rest ×1
ruby ×1
sails.js ×1
scroll ×1
soa ×1
tcp ×1