EventMachine or GServer?

  • Thread starter ArtÅ«ras Å lajus
  • Start date
A

Artūras Šlajus

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
 
A

Artūras Šlajus

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?
 
C

Chuck Remes

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 !=3D ""
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?

EM is certainly very fast but I don't know if it is easier to use. The =20=

documentation is hard to understand and the examples are all so =20
simplistic it is often difficult to see how to write a complex client =20=

or server.

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

cr
 
A

Artūras Šlajus

Chuck said:
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 :)
 
F

Francis Cianfrocca

On May 17, 2009, at 5:34 PM, Art=FBras =D0lajus wrote:

Hm, the EM implementation...

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 simplisti= c
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,778
Messages
2,569,605
Members
45,237
Latest member
AvivMNS

Latest Threads

Top