Tag: 事件驱动

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

目前在项目上遇到一些麻烦。 我正在实施一个游戏,我想让它以事件为导向。 到目前为止,我有一个EventHandler类,它具有重载方法,具体取决于生成的事件类型(PlayerMove,Contact,Attack等) 我将有游戏驱动程序或类生成事件。 我的问题是如何在不将事件生成类紧密耦合到事件处理程序并使EDA冗余使用的情况下如何有效地处理事件? 我想设计自己的简单处理程序,而不是使用内置的Java处理程序

Java中的非阻塞(异步)DNS解析

是否有一种干净的方法以非阻塞的方式异步解析Java中的DNS查询(通过主机名获取IP)(即状态机,而不是1个查询= 1个线程 – 我想同时运行数万个查询,但是没有运行成千上万的线程)? 到目前为止我发现了什么: 标准InetAddress.getByName()实现是阻塞的,看起来像标准Java库缺少任何非阻塞实现。 在批量问题中解决DNS讨论了类似的问题,但找到的唯一解决方案是multithreading方法(即一个线程在每个给定时刻只处理1个查询),这不是真正可扩展的。 dnsjava库也只是阻止。 dnsjava有一些古老的非阻塞扩展,可以追溯到2006年,因此缺少任何现代Java并发内容,例如Future范例使用,以及非常有限的仅队列实现。 dnsjnio项目也是dnsjava的扩展,但它也适用于线程模型(即1个查询= 1个线程)。 asyncorg似乎是我迄今为止针对此问题找到的最佳解决方案,但是: 它也是从2007年开始,看起来已经废弃了 几乎没有任何文档/ javadoc 使用许多非标准技术,如Fun类 我错过了任何其他想法/实施? 澄清 。 我有一个相当大(每天几TB)的日志量。 每个日志行都有一个主机名,可以来自互联网上的任何地方,我需要一个IP地址作为我的进一步统计计算的主机名。 行的顺序并不重要,所以,基本上,我的想法是开始2个线程:首先迭代线: 读一行,解析它,获取主机名 发送查询到DNS服务器以解析给定的主机名,不要阻止回答 将行和DNS查询套接字句柄存储在内存中的某个缓冲区中 转到下一行 第二个线程将: 等待DNS服务器回答任何查询(使用epoll / kqueue技术) 阅读答案,找到缓冲区中的哪一行 将已解析IP的行写入输出 继续等待下一个答案 Perl中使用AnyEvent简单模型实现向我展示了我的想法通常是正确的,我可以通过这种方式轻松实现每秒15-20K查询的速度(天真的阻塞实现每秒2-3次查询 – 只是为了比较 -这就像4个数量级的差异)。 现在我需要在Java中实现相同的 – 我想跳过我自己的DNS实现;)