异步DNS查询
RubyDNS可以被用来当作异步DNS客户端,请求一个指定的DNS服务器或系统默认的解析器。
# There technically should be at least one nameserver:
resolver = RubyDNS::Resolver.new(RubyDNS::System::nameservers)
EventMachine::run do
resolver.query('google.com') do |response|
assert_equal RubyDNS::Message, response.class
assert_equal Resolv::DNS::RCode::NoError, response.rcode
EventMachine::stop
end
end
EventMachine
提供基本的异步事件处理,因此 RubyDNS::Resolver
相关的代码必须在EventMachine
上下文里执行。
超时处理
因为是异步服务,一个超时时间可以被设置(默认是5秒)。如果在给定的时间内没有收到响应,一个RubyDNS::ResolutionFailure
错误就会返回给调用者,在response
参数里:
SERVERS = [[:udp, '127.0.0.1', 5330], [:tcp, '127.0.0.1', 5330]]
resolver = RubyDNS::Resolver.new(SERVERS, :timeout => 60)
更多例子,请查看rubydns/test/test_slow_server.rb.
日志
额外的调试输出可以被写到日志文件,通过提供的:logger
选项:
require 'logger'
SERVERS = [[:udp, '127.0.0.1', 5330], [:tcp, '127.0.0.1', 5330]]
resolver = RubyDNS::Resolver.new(SERVERS, :logger => Logger.new($stderr))