代码之家  ›  专栏  ›  技术社区  ›  Evan Zamir

挂起EventMachine中启动的MySQL2连接

  •  0
  • Evan Zamir  · 技术社区  · 11 年前

    我正在从mysql2 gem文档中运行以下代码:

    require 'mysql2/em'
    
    EM.run do
      client1 = Mysql2::EM::Client.new
      defer1 = client1.query "SELECT sleep(3) as first_query"
      defer1.callback do |result|
        puts "Result: #{result.to_a.inspect}"
      end
    
      client2 = Mysql2::EM::Client.new
      defer2 = client2.query "SELECT sleep(1) second_query"
      defer2.callback do |result|
        puts "Result: #{result.to_a.inspect}"
      end
    end
    

    运行良好,打印结果

    Result: [{"second_query"=>0}]
    Result: [{"first_query"=>0}]
    

    但是,脚本只是挂起,再也不会返回到命令行。知道发生了什么事吗?

    1 回复  |  直到 11 年前
        1
  •  0
  •   tbuehlmann    11 年前

    EM.run 将启动EventMachine反应器。那个反应器只是循环,循环,直到你以某种方式告诉它停止。您可以使用手动停止 EM.stop .

    在您的情况下,您可能需要检查回调结果,并在两个回调都触发时停止反应器。Ilya的em-http请求库提供了一个很好的 interface 正是为了那个用例。也许值得一看。