我正在使用mysql2/em
类型从 EventMachine 代码中查询我的数据库:
database.query("select * from `mytable`").callback {|rows|
...
}
通常我会使用方法迭代结果行rows.foreach
。但是现在我需要在某个事件发生时“按需”迭代行。就像是:
row = rows.get_next
这可能吗?
我正在使用mysql2/em
类型从 EventMachine 代码中查询我的数据库:
database.query("select * from `mytable`").callback {|rows|
...
}
通常我会使用方法迭代结果行rows.foreach
。但是现在我需要在某个事件发生时“按需”迭代行。就像是:
row = rows.get_next
这可能吗?
在我的事件机器项目中,当我需要一个数据库连接时,我使用 ActiveRecord,因此抽象层的工作方式与 Rails 相同
这是一个使用捆绑器的简单示例
# A sample Gemfile
source "https://rubygems.org"
# gem "rails"
gem 'eventmachine'
gem 'activerecord'
gem 'mysql2'
adapter: mysql2
encoding: utf8
reconnect: false
database: bd_coop
pool: 5
username: sps_admin
password: sps_admin_db
host: localhost
database = YAML.load_file(File.expand_path('../database.yml', __FILE__))
ActiveRecord::Base.establish_connection(
:adapter => database["adapter"],
:database => database["database"],
:password => database["password"],
:host => database["host"],
:username => database["username"]
)
class Model < ActiveRecord::Base
self.table_name = "model"
end
require "active_record"
require File.expand_path('../../config/db_connection', __FILE__)
module EchoServer
def receive_data data
Model.create(:data => data)
send_data Model.all
end
end
EventMachine.run {
puts "Server started"
EventMachine.start_server "0.0.0.0", 8082, EchoServer
}
这是我想出的:
EM.run {
database.query('select * from mytable').callback {|rows|
e = rows.to_enum
loop {
p e.next
}
EM.stop
}.errback {|e|
p e
EM.stop
}
}