码迷,mamicode.com
首页 > 其他好文 > 详细

异步DNS解析的实现

时间:2014-05-04 11:15:14      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   ext   

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

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

1. 基于多线程的DNS 解析

2. 基于NIO的DNS解析

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

bubuko.com,布布扣
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);
    }
}
}
bubuko.com,布布扣

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

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

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

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

异步DNS解析的实现,布布扣,bubuko.com

异步DNS解析的实现

标签:style   blog   class   code   java   ext   

原文地址:http://www.cnblogs.com/cruze/p/3700130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!