xing/beetle

Beetle handlers should be able to do async work

joevandyk opened this issue · 2 comments

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.

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.