是否有一种干净的方法可以异步解析Java中的DNS查询(通过主机名获取IP )、以非阻塞方式(即状态机,而不是1 query =1线程--我希望同时运行数万个查询,但不运行数万个线程)?
我到目前为止发现的是:
InetAddress.getByName()实现是阻塞的,看起来标准Java库缺少任何非阻塞实现。Future并发工具,比如Future范式的使用,以及非常有限的仅队列实现。Fun类。
还有其他我错过的想法/实现吗?
Clarification.我有相当大的日志量(每天几TB )。每条日志行都有一个主机名,可以来自互联网的任何地方,我需要一个IP地址作为进一步的统计计算的主机名。行的顺序并不重要,所以,基本上,我的想法是启动两个线程:首先遍历行:
第二条线索是:
epoll / kqueue的技术)在Perl中使用AnyEvent的一个简单的模型实现向我展示了我的想法通常是正确的,而且我可以轻松地达到每秒15-20K查询的速度(简单的阻塞实现可以达到每秒2-3次查询--只是为了比较--所以这相当于4个数量级的差异)。现在我需要在Java中实现同样的功能--我想跳过推出我自己的DNS实现;)
发布于 2012-08-18 00:49:51
也许你要找的就是米娜上面的Apache目录服务的DNS实现。JavaDocs和其他有用的指南在页面的左边栏中.
发布于 2013-06-03 15:55:48
有一些关于非阻塞的DNS 网中的工作,但是它仍在进行中,很可能只在5.0中发布
发布于 2012-08-18 00:40:54
我认为,您必须自己使用基本套接字支持在原始UDP之上实现DNS客户端协议,或者使用NIO通道在TCP之上实现。
https://stackoverflow.com/questions/11955409
复制相似问题