青山です。
Keep-Alive を受け付けるとわかっているホスト相手には、こんな感じにする
とかなり高速化できます。ただし、なんらかの事情で相手が途中で
Connection: Close を返したりした場合にはおかしくなりますけれど。
#!/usr/local/bin/ruby
require "socket"
CR = "\015"
LF = "\012"
EOL = CR + LF
def get_head(host, port, files)
heads = []
sock = TCPsocket.open(host, port)
sock.binmode
STDERR.print "server open.\n"
Thread.start do
for i in 0 ... files.size
if i == files.size - 1
connection = "Close"
else
connection = "Keep-Alive"
end
sock << "HEAD " << files[i] << " HTTP/1.1" << EOL
sock << "Host: " << host << EOL
sock << "Connection: " << connection << EOL
sock << EOL
end
end
begin
head = sock.gets(EOL + EOL)
heads.push(head)
end until /Connection:\s+Close/ni === head
sock.close if not sock.closed?
heads
end
port = "80"
host = "www.jin.gr.jp"
files = %w[ /~nahi/ /~nahi/Ruby/ /~nahi/link-Ruby.html ]
get_head(host, port, files).each do |head|
print head
end
--
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>