Я пытаюсь создать небольшой скрипт ruby, который получает потоковые данные с помощью кодировки HTTP Chunked Transfer.Поэтому я использую ruby в конце client .Я могу найти много вопросов и информации о ruby (и rails) , обслуживающих потоков, но не много о , потребляющих их.Возможно, потому что это тривиально и должно работать как функция низкого уровня HTTP.Так может кто-нибудь дать мне небольшой пример сценария?
Я попробовал пару вещей.Этот использует open-uri:
require 'open-uri'
streamURL = 'http://localhost/sample-stream.php'
puts "Opening"
open(streamURL) do |f|
puts "Opening steam " + streamURL + " (never gets here)"
p f.meta
p "Content-Type: " + f.content_type
p "last modified" + f.last_modified.to_s
no = 1
# print the first three lines
f.each do |line|
print "#{no}: #{line}"
no += 1
break if no > 4
end
end
... а этот использует net http:
require 'net/http'
require 'uri'
streamURL = 'http://localhost/sample-stream.php'
url = URI.parse(streamURL)
full_path = (url.query.empty?) ? url.path : "#{url.path}?#{url.query}"
the_request = Net::HTTP::Get.new(full_path, {'Transfer-Encoding' => 'chunked', 'content-type' => 'text/plain'})
#(Side question: Does it even make sense to specify 'chunked' in the request?)
puts "Opening stream " + streamURL
the_response = Net::HTTP.start(url.host, url.port) { |http|
http.request(the_request)
}
puts the_response.body #never gets here
В обоих случаях он ничего не выводит, и я могу видеть в apache мойPHP-скрипт активно выдает все больше и больше данных.Я думаю, что понятно, что здесь происходит не так.В обоих случаях я думаю, что мой скрипт ждет полного ответа (что никогда не произойдет), прежде чем его обработать.
Я должен упомянуть, что может быть что-то не так с моим скриптом php (сервером), но яЯ могу видеть, как он очень хорошо врывается в Firefox.
Так есть ли простой рубиновый способ для потоковой передачи данных?или я должен ожидать специальных гемов / библиотек для этого?(Я наткнулся на эту библиотеку например)