问题标签 [event-driven]
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.
multithreading - 什么是事件驱动编程?
什么是事件驱动编程,事件驱动编程与线程有什么关系?我来到这个问题阅读有关服务器以及它们如何处理用户请求和管理数据的信息。如果用户发送请求,服务器开始处理数据并将状态写入表中。为什么呢?服务器是否停止为该用户处理数据并开始为另一个用户处理数据或每个用户的处理在不同的线程(多线程服务器)中运行?
http - Netty 中的同步 HTTP 调用
我的应用程序接收到一个 HTTP 请求,在管道的中间,调用另一个服务器以获取支持信息。在响应返回之前,初始 HTTP 请求无法继续通过管道。我不能awaitUninterruptability()
从 I/O 线程中使用,那么进行这些调用的最佳方法是什么,这样我就不会阻止 Netty 的事件循环,而是将客户端的管道暂停,直到我的调用返回并告诉管道继续?
epoll - epoll/非阻塞事件驱动IO
我关于基于 epoll 的非阻塞事件驱动网络 IO 的问题是——客户端与 epoll 服务提供者的连接如何保持打开状态?当服务器端没有永久接收器时,为什么客户端的连接不会中断?
当服务器处理了请求并且应该继续前进时,客户端连接如何保持打开状态(POST 上的 Keep-Alive)。
cpu-usage - 事件驱动编程中的主循环和替代方案
据我所知,事件驱动程序需要一个主循环,例如
我只是好奇这个while循环是否会消耗高CPU使用率?有没有其他方法可以在不使用主循环的情况下实现事件驱动程序?
ruby-on-rails - 什么时候线程框架比事件驱动框架更好?(即,rails 什么时候比 node.js 更好?)
我了解什么是线程框架(Rails、Django、Symfony2、……)。而且我了解什么是事件驱动框架(Node.js、EventMachine、Twisted ……)以及为什么它对实时、聊天、速度等非常有用……此外,它们似乎不会对正常用例造成问题。所以:
- 事件驱动框架的缺点是什么?
- 什么时候我应该更喜欢 Rails 而不是 Node.js?
- 为什么不是所有新的 Web 服务器都使用 EventMachine、Twisted 或 Node.js 编写?
- Django 或 Rails 等著名框架会成为事件驱动还是消亡?
android - 谁调用 Android 生命周期处理程序?
我对 Android 的事件驱动编程范式感到很困惑?谁负责调用生命周期处理程序(onCreate()、onResume() 等)?是安卓操作系统吗?还是运行在应用程序进程中的 Dalvik VM?
任何人都可以回答我的问题或指导我一些相关资源吗?非常感谢你。
c# - Winforms 订阅自己的事件
我看到开发人员在 WinForms 中做的一件常见的事情是表单/控件订阅他们自己的事件,所以你得到
而不是
现在我知道第二种方式更面向对象,第一种方式是事件驱动的,我倾向于重构以覆盖 - 有什么理由不这样做吗?我不想做的是做一些并非真正需要的改变,纯粹是一种审美选择。
c - 带有套接字的 C 中的事件驱动模型
我对 C 中的事件驱动编程非常感兴趣,尤其是套接字,所以我将花一些时间进行研究。
假设我想构建一个包含大量文件和网络 I/O 的程序,比如客户端/服务器应用程序,基本上,第一个问题是这个模型背后的理念是什么。虽然在正常编程中我会产生新的进程,但一个进程实际上可以服务于许多其他请求。例如,有一些网络服务器可以在不创建线程或其他进程的情况下处理连接,只需一个主进程。
我知道这很复杂,但很高兴知道不同的解决方案是如何工作的。
java - 使用 AND、OR 和 SEQ 对事件流使用 Reaction/ECA 规则进行事件模式检测
我有一个事件流,其中事件是一组属性/值对,例如:
E1 = {(ID, val), (attr, val), (attr, val), ... }
我想只使用 SNOOP 样式的事件代数来检测简单的模式,即AND, OR, SEQ
没有括号。
示例:E1 AND E2 OR E4
, 其中E
是标识符。
现在,我想使用一些事件处理引擎来跟踪事件流并做出反应,以防找到模式。规则类似于此示例中的RuleML ECA规则:
这些规则应该从列表中生成/解析。如果有人可以向我推荐一个能够检测上述简单模式的 CEP 引擎,那就太棒了。
我尝试过Esper和 prova (Prolog + Java),但无法将列表中的模式“解析”成一组规则。
非常感谢任何帮助!
有谁知道,如果 Drools 可以做到这一点?特别是,我需要能够AND,OR,SEQ
在规则的 on/when 部分中使用。
java - Java中的非阻塞(异步)DNS解析
有没有一种干净的方法来异步解析 Java 中的 DNS 查询(通过主机名获取 IP),以非阻塞方式(即状态机,不是 1 个查询 = 1 个线程 - 我想同时运行数万个查询,但是不运行数万个线程)?
到目前为止我发现了什么:
- 标准
InetAddress.getByName()
实现是阻塞的,看起来标准 Java 库缺少任何非阻塞实现。 - Resolving DNS in bulk question 讨论了类似的问题,但找到的唯一解决方案是多线程方法(即一个线程在每个给定时刻仅处理 1 个查询),这不是真正可扩展的。
- dnsjava库也只是阻塞的。
- dnsjava的古老非阻塞扩展可以追溯到 2006 年,因此缺乏任何现代 Java 并发内容,例如
Future
范式使用,以及非常有限的仅队列实现。 - dnsjnio项目也是对 dnsjava 的扩展,但它也适用于线程模型(即 1 个查询 = 1 个线程)。
- asyncorg似乎是迄今为止我找到的针对此问题的最佳可用解决方案,但是:
- 它也是 2007 年的,看起来被遗弃了
- 几乎没有任何文档/javadoc
- 使用了很多非标准的技术,比如
Fun
class
我错过了任何其他想法/实现?
澄清。我有相当大(每天几 TB)的日志量。每个日志行都有一个主机名,该主机名几乎可以来自互联网上的任何地方,我需要该主机名的 IP 地址以进行进一步的统计计算。行的顺序并不重要,所以,基本上,我的想法是启动 2 个线程:首先迭代行:
- 读取一行,解析,获取主机名
- 向 DNS 服务器发送查询以解析给定的主机名,不要阻止回答
- 将线路和 DNS 查询套接字句柄存储在内存中的某个缓冲区中
- 转到下一行
第二个线程将:
- 等待 DNS 服务器回答任何查询(使用
epoll
/kqueue
like 技术) - 阅读答案,找出它在缓冲区中的哪一行
- 将解析 IP 的行写入输出
- 继续等待下一个答案
Perl 中使用的一个简单模型实现AnyEvent
向我表明,我的想法通常是正确的,并且我可以通过这种方式轻松实现每秒 15-20K 查询的速度(天真的阻塞实现每秒查询 2-3 次 - 只是为了比较 - 所以这就像4个数量级的差异)。现在我需要在 Java 中实现相同的功能 - 我想跳过推出我自己的 DNS 实现;)