如何使用Ruby Eventmachine编写(大)文件

And*_*eas 6 ruby eventmachine

我花了好几天现在为eventmachine找到了一些非echo服务器的例子,但似乎没有.假设我想编写一个接受文件并将其写入Tempfile的服务器:

require 'rubygems'
require 'tempfile'
require 'eventmachine'

module ExampleServer

  def receive_data(data)
    f = Tempfile.new('random')
    f.write(data)
  ensure
    f.close
  end

end

EventMachine::run {
  EventMachine::start_server "127.0.0.1", 8081, ExampleServer
  puts 'running example server on 8081'
}
Run Code Online (Sandbox Code Playgroud)

写入文件将阻止反应堆,但我不知道怎么做'Eventmachine风格'.我是否必须以块的形式读取数据并将每个块写入Em.next_tick块中的磁盘?

感谢Andreas的帮助

Chr*_*ton 1

docs来看,您似乎只需要附加文件(尽管正如您指出的那样,这可能无效,似乎选项是使用 File.write/ie 阻塞...)和send_data

虽然我认为你不能将阻塞/非阻塞 IO 与 EM 混合使用:(

鉴于源数据是一个套接字,我猜这将由 EventMachine 处理。

也许是谷歌小组的问题......

〜克里斯