是否有非阻塞形式的Zlib :: GzipReader?

时间:2014-01-18 23:14:16

标签: ruby multithreading gzip celluloid

我正在尝试使用Zlib::GzipReader从管道中读取数据来实现流式Gzip解压缩程序,但我似乎无法弄清楚如何以非阻塞方式执行此操作。这是相关的代码:

# In thread A
read, write = IO.pipe

reader = Zlib::GzipReader.new(read) # this blocks

reader.each_line do |line|
  puts "Yay line! #{line}"
end

# In thread B
streaming_http_response do |gzip_chunk|
  write.puts(some_chunk)
end

如何在不将整个压缩字符串读入阅读器的情况下流式传输解压缩的内容?

1 个答案:

答案 0 :(得分:0)

事实证明Zlib::GzipReader.new只会阻塞,直到它可以读取标题。写完一些后,它工作得很好。