Forum: Ruby EventMachine or GServer?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
ArtÅ«ras Å. (Guest)
on 2009-05-18 01:52
I wrote my nifty server in GServer, but just stumbled on EventMachine.
Is EM better than my GServer implementation (i guess it is :))

class GameServer < GServer
  def initialize(*args)
    super(*args)
  end

  def serve(io)
    log "Registering #{io} to Dispatcher."
    dispatcher = Dispatcher.singleton
    dispatcher.register io

    loop do
      begin
        log "Reading from #{io}"
        str = nil
        Timeout.timeout(CONFIG['read_timeout']) { str = io.gets }
        until str.nil?
          str.strip!
          dispatcher.receive io, JSON.load(str)

          Timeout.timeout(CONFIG['read_timeout']) { str = io.gets }
        end
      rescue Timeout::Error
      end

      log "Dispatching outgoing messages..."
      dispatcher.each_outgoing_for(io) do |message|
        io.write JSON.dump(message)
        io.write "\n"
        io.flush
      end

      log "Sleeping..."
      sleep CONFIG['sleep_timeout']
    end
  rescue JSON::ParserError
    io.write "Unknown protocol, aborting.\n"
  rescue Exception => e
    log "Exception for #{io}: #{e.inspect}"
  end
end
ArtÅ«ras Å. (Guest)
on 2009-05-18 02:33
Hm, the EM implementation...

module GameServer
  def post_init
    puts "Registering #{self} to Dispatcher."
    Dispatcher.singleton.register self
  end

  def receive_data(data)
    Dispatcher.singleton.receive self, JSON.load(data) if data != ""
  rescue JSON::ParserError
    send_data "Unknown protocol, aborting.\n"
    close_connection_after_writing
  end

  def send_message(message)
    send_data "%s\n" % JSON.dump(message)
  end

  def unbind
    Dispatcher.singleton.unregister self
  end
end

So I guess EM handles loads better (as it's C) and is easier to use?
Chuck R. (Guest)
on 2009-05-18 15:44
(Received via mailing list)
On May 17, 2009, at 5:34 PM, Artūras Šlajus wrote:

>  rescue JSON::ParserError
>  end
> end
>
> So I guess EM handles loads better (as it's C) and is easier to use?

EM is certainly very fast but I don't know if it is easier to use. The
documentation is hard to understand and the examples are all so
simplistic it is often difficult to see how to write a complex client
or server.

I suggest downloading projects that have used EM (like Thin) and
learning good techniques from that code.

cr
ArtÅ«ras Å. (Guest)
on 2009-05-18 19:13
Chuck R. wrote:
> EM is certainly very fast but I don't know if it is easier to use. The
> documentation is hard to understand and the examples are all so
> simplistic it is often difficult to see how to write a complex client
> or server.
Well, it's good enough for me. I guess I'll stick to EM then :)
Francis C. (Guest)
on 2009-05-18 20:31
(Received via mailing list)
On Mon, May 18, 2009 at 7:42 AM, Chuck R. <removed_email_address@domain.invalid>
wrote:

>>
>>
> it is often difficult to see how to write a complex client or server.
>
> I suggest downloading projects that have used EM (like Thin) and learning
> good techniques from that code.
>
> cr
>
>
>
>
I'd be very open to hearing suggestions on how to improve the EM
documentation. Feel free to email me directly.
This topic is locked and can not be replied to.