繁体   English   中英

Ruby TCPServer总是延迟dns反向查找吗? -如何禁用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM