[英]In Ruby, how do you reverse dns lookup the hostname of a zeroconf/bonjour computer?
[英]Ruby TCPServer always delay on dns reverse lookup? - how to disable?
我用ruby gserver创建了一个TCPServer。
每次我远程连接到服务器时,连接建立都需要2-4秒。
仅当我从远程计算机连接时,才会发生这种情况。
来自运行该服务的同一台计算机的连接将发送紧急响应。
对于同一台机器上的连接,如果我通过本地主机或通过机器ip连接,则没有任何区别。
我认为延迟取决于反向查找,但无法定位原因。
在gserver.rb中是第263行
client = @tcpServer.accept
在这里发生延迟,我不知道这种方法是什么。
我将测试期间使用的所有计算机添加到本地主机文件中。 但这并没有改变。
使用Webrick时也会发生同样的情况,我也尝试设置
BasicSocket.do_not_reverse_lookup = true
以及直接在生成的服务器套接字上
Socket.do_not_reverse_lookup = true
以及客户端连接套接字上
client.do_not_reverse_lookup = true
但这也没有改变任何延迟。
只要建立连接,就会解析remote_host和remote_ip的值,并在hosts文件中定义。
我尝试在Ubuntu 14.04上运行ruby 2.2.1以及运行debian wheezy的ruby 1.9.3。
行为相同-连接服务的延迟时间较长。
问:如何解决/禁用TCPServer上的查找?
问题取决于我在MAC OSX Mav上运行的客户端计算机。
使用的telnet客户端尝试打开IPv6连接,然后再尝试打开IPv4。
要解决延迟,只需打开与
telnet -4 my-server 3333
我建立了一个小型的连接回显服务,您可以在其中检查解析和计时。
如果更改NO_REVERSE_LOOKUP,则将获得IP或地址,并且如果无法解析,将获得不同的响应时间。
require 'socket'
NO_REVERSE_LOOKUP = true
CONNECT_PORT = 3333
puts "#{Time.now} Starting service on port: #{CONNECT_PORT}"
# the full hell - just to test if anything meets what we want
TCPServer.do_not_reverse_lookup = NO_REVERSE_LOOKUP
BasicSocket.do_not_reverse_lookup = NO_REVERSE_LOOKUP
Socket.do_not_reverse_lookup = NO_REVERSE_LOOKUP
srv = TCPServer.open(CONNECT_PORT)
puts "#{Time.now} Waiting for client"
client = srv.accept
puts "#{Time.now} Client connected"
client.do_not_reverse_lookup = NO_REVERSE_LOOKUP
client.print "Hello connected\n"
# in case that we disabled reverse lookup, we should only receive IP Adresses
puts "#{Time.now} Getting server address infos"
puts "SERVER INFO:"
puts NO_REVERSE_LOOKUP ? client.addr(:numeric) : client.addr(:hostname)
puts ""
puts "#{Time.now} Getting remote client infos"
puts "REMOTE INFO:"
puts NO_REVERSE_LOOKUP ? client.peeraddr(:numeric) : client.peeraddr(:hostname)
###
puts "#{Time.now} Closing connection"
client.close
puts "#{Time.now} End"
感谢#ruby-lang irc的drbrain向我指出了IPv6问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.