异步DNS解析的实现

高性能爬虫为什么使用定制DNS客户端一文中阐述了DNS解析是网络爬虫的瓶颈。

目前主要有两种方法来提高DNS解析效率:

1. 基于多线程的DNS 解析

2. 基于NIO的DNS解析

dnsjava中使用的解析方式就是基于多线程的DNS解析


class ResolveThread extends Thread {
private Message query;
private Object id;
private ResolverListener listener;
private Resolver res;
/** Creates a new ResolveThread */
public ResolveThread(Resolver res, Message query, Object id, ResolverListener listener){
this.res = res;
this.query = query;
this.id = id;
this.listener = listener;
}
/**
* Performs the query, and executes the callback.
*/
public void run() {
try {
Message response = res.send(query);
listener.receiveMessage(id, response);
}
catch (Exception e) {
listener.handleException(id, e);
}
}
}

ResolveThread继承了Thread类并重写了run方法,在run方法中发送一个解析请求并等待响应,当接收到响应时调用

listener.receiveMessage
回调函数来处理该响应。

基于NIO的DNS解析中可设置两个线程,一个线程用来发送dns请求另外一个用来接收dns响应。

本文推荐使用方法二,原因如下:
1.
多线程环境下要考虑同步的问题,对于资源的访问要加锁
2. 多线程环境下要建立多个socket,占用系统资源
3.
多线程的调度会增加系统的开销

时间: 2024-08-03 07:02:54

异步DNS解析的实现的相关文章

我眼中的 Nginx(六):深入 Nginx/Openresty 服务里的 DNS 解析

张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技术的研究:曾为 ngx_lua 贡献源码,在 Nginx.ngx_lua.CDN 性能优化.日志优化方面有较为深入的研究. DNS 解析在 Nginx/OpenResty 的服务里是不可分割的一个功能,本文主要来介绍下 Nginx 和 OpenResty 服务里的一些不同的 DNS 解析方式以及它们之间

一、DNS解析的基本原理

1.基础知识 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析).DNS协议运行在UDP协议之上,使用端口号53. 2.专业术语 FQDN : Full Qualified Domain Name  完全合格域名 例如:www.baidu.com   www.mirrors.163.com

基于BIND软件实现互联网DNS解析

一.什么是DNS服务 DNS全称(Domain Name System)域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串:DNS通过软件来进行实现域名对IP的解析:这里是通过BIND开源软件实现:BIND是开放源码软件,它允许在Internet上发布域名系统(DNS)信息,并为用户解析DNS查询:该名称绑定代表是"Berkeley Internet Name Domain"BIND是迄今为止使用最广泛

C#实现DNS解析服务

利用ARSoft.Tools.Net实现一个客户端DNS解析服务,通过这个工具,可看到当前客户端对某个域名的解析地址是否正确. ARSoft.Tools.Net是一个非常强大的开源DNS控件库,包含.Net SPF validation, SenderID validation以及DNS Client.DNS Server接口. 使用该接口可轻松实现DNS客户请求端及服务器解析端.项目地址:http://arsofttoolsnet.codeplex.com/或参考:http://i.iscla

DNS解析

大家好,今天51开源给大家介绍一个在配置文件,那就是/etc/resolv.conf.很多网友对此文件的用处不太了解.其实并不复杂,它是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序.该文件是由域名解析器(resolver,一个根据主机名解析IP地址的库)使用的配置文件.它的格式很简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数.resolv.conf的关键字主要有四个,分别是:nameserver    //定义DNS服务器的IP地址do

DNS解析服务器

Windows2008 DNS解析服务器建立 DNS解析服务器在我们日常生活中的使用非常广泛,相信也有不少人对此存在一些疑惑或者想要了解DNS解析服务器,这里,我简单向大家介绍windows2008中DNS服务器的建立. 第一步,打开服务器管理器,选择添加角色,选中DNS服务器,下一步,选择默认安装程序,进行安装,如图. 第二步,安装完成之后,在管理工具中打开DNS服务器,并在正向查找区域中新建域(新建过程中基本选择默认即可,其中需要注意的是动态更新上面选择不允许动态更新). 域建立好了之后,在

serv-u建立ftp并用DNS解析

1.     安装serv-u. 2.      新建域 3.选择本机IP地址 4.新建用户ftpuser 5.设置ftpuser密码 6.用户建立成功后,用另一台电脑访问ftp://10.0.30.11 7.访问成功 8.建立匿名用户,ID为anonymous. 9.弹出密码窗口时,不要设置密码 10.设置访问权限为只读访问,达到只具有下载权限的效果 11.设置完成后,匿名访问成功 12.新建区域ganen01.cn 13.设置ftp属性 14.DNS域名ganen01.cn访问ftp成功 s

Linux 系统DNS解析

1. 高速缓存dns服务器 修改server的配置文件/etc/named.conf  10options {  11  listen-on port 53 { any; };  #监听所有端口的bind服务  12  listen-on-v6 port 53 { ::1; };  13  directory      "/var/named";  14  dump-file       "/var/named/data/cache_dump.db";  15  s

Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析

默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常被解析,莫名其妙地打不开,或者时好时坏. 如果碰上不稳定的本地DNS,还可能经常出现无法解析的情况.除了要避免"坏"的DNS的影响,我们还可以利用DNS做些"好"事,例如管理局域网的DNS.给手机App Store加速.纠正错误的DNS解析记录.保证上网更加安全.去掉网