Beetle handlers should be able to do async work
joevandyk opened this issue · 2 comments
joevandyk commented
Sample code:
client.register_handler(:search) do |m| query = m.data uri = "http://www.google.com/search?q=#{URI.encode(query)}" http = EM::HttpRequest.new(uri).get http.callback do |page| doc = Nokogiri::HTML(page.response) result = doc.css('h3.r a.l').map { |link| link.content }.to_json # I want to return result # Maybe something like # m.finished!(result) end end client.listen do puts "started google search server" end
I made a sample project here: https://github.com/joevandyk/beetle-em/blob/em/server.rb (in the em branch).
So, ideally, a single RPC worker could handle multiple jobs at the same time that involve IO. My understanding is right now, a Beetle RPC handler has no way to do anything asynchronously.
skaes commented
your understanding is correct. not sure we really want to support callback style handlers at all.
skaes commented
This would require a major refactoring, if it even can be fitted to our current model.