为Ruby编写适当的Eventmachine代码?

时间:2011-05-26 04:57:42

标签: ruby eventmachine

我正在尝试了解Eventmachine。

我有一台服务器:

module EchoServer
  def post_init
    puts "connected"
  end

  def receive_data(data)
   puts "Receiving data: #{data}"

   GenericModel.create!(:text => data)
  end

  def unbind
    puts "disconnected"
  end
end

EM.run do
  EM.start_server '127.0.0.1', 1234, EchoServer
end

和客户:

class Echo < EventMachine::Connection
  def post_init
    send_data 'Hello'
  end

  def receive_data(data)
    p data
    close_connection
  end

  def connection_completed
    puts "connection completed"
  end

  def unbind
    EventMachine.stop
  end
end

EventMachine.run {
  EventMachine.connect '127.0.0.1', 1234, Echo
}

这就是我想知道的:数据库访问速度往往较慢,那么我应该如何重写GenericModel.create!代码行以避免减慢我的反应器循环?

2 个答案:

答案 0 :(得分:1)

要么使用非阻塞且基于em的连接适配器(如em-mysql),要么在另一个线程中执行该任务。

答案 1 :(得分:0)

看看this SO question。它是基于Rails的,但是演示应用程序非常清楚地解释了使用Eventmachine命中数据库的好处。