【发布时间】:2012-09-27 06:32:50
【问题描述】:
我使用whois 来执行和解析whois 查询。问题是:我需要做得更多。成千上万。我找到了异步包em-whois,这听起来很适合我。这是 whois 的简单插件,它依赖于 Ruby Fibers 和 em-synchrony。
我当前执行 whois 查询的代码如下所示:
...
c = Whois::Client.new(:timeout => timeout)
r = c.query(domain)
...
安装em-whois 后,我正在尝试扩展this basic example。
我的代码现在看起来像这样,但仍然很慢:
$: << File.dirname(__FILE__) + '/../lib'
require 'em-whois'
EM.synchrony do
domain = ARGV[0] || "github.com"
$i = 0;
$num = 100;
arr = Array.new($num)
# perform all queries
begin
puts("Inside the loop i = #$i" );
$i += 1;
arr[$i] = Whois.whois(domain);
end while $i < $num
$i = 0;
# get all results
begin
$i += 1;
puts "\r#{domain}\n#{"-" * domain.length}"
[:available?, :status, :expires_on].each do |k|
puts "#{k}: #{arr[$i].properties[k]}"
end
end while $i < $num
EM.stop
end
如何使用 whois 和 em-whois 的异步功能执行批量查询(1k 个域)?
我以前对 ruby 没有任何经验。我是 Python/C/PHP 开发人员。请帮忙。
【问题讨论】:
-
同时打开多个与 whois 服务器的连接似乎是永久阻止的好方法。
-
我的问题更具理论性。我需要代码方面的帮助,我知道限制
-
但是很可能服务器正在限制您,而您的代码很好。如果您分析代码,它是否会在 I/O 等待中占据大量时间?
-
您需要的不仅仅是代码方面的帮助。这个概念是有缺陷的。
标签: ruby asynchronous eventmachine whois