Ruby EventMachine + em-WebSocket

Post on 15-Jan-2015

3,191 views 1 download

Tags:

description

Presentación de la charla "Ruby EventMachine + em-WebSocket", la cual fue expuesta en la reunión inaugural del Grupos de Usuarios Ruby de Venezuela - http://ruby.org.ve

transcript

Ruby EventMachineY un pequeño ejemplo usando

em-websockets

@CarlosForero

Concurrencia

Concurrencia usando hilos (Threads)

Concurrencia usando hilos (Threads)

Cada uno tiene su propio Stack

Uso de semáforos de sistema operativo

Baja el desempeño cuando aumenta el número de conexiones

Concurrencia usando el Patrón Reactor (Reactor Pattern)

Reactor Pattern vs Multithreading

Apache

Thread Based ServerEvent Driven Based Server

Reactor Pattern vs Multithreading

Reactor Pattern vs Multithreading

Concurrencia usando el Patrón Reactor (Reactor Pattern)

Reactor Pattern

Ruby EventMachine

require 'eventmachine'

EM.run do

EM.add_timer(5) do puts "Extremadamente simple... adios!" EM.stop end

end

Ruby EventMachine

require 'eventmachine'

EM.run do

EM.add_timer(7) do puts "Listo" EM.stop_event_loop end

EM.add_periodic_timer(1) do puts "Esperando ... " end

end

EventMachine::Connection

EventMachine::Connection

require 'eventmachine'

class EchoHandler < EM::Connection def receive_data(data) send_data(data) endend

EM.run do EM.start_server("127.0.0.1", 10000, EchoHandler)end

EventMachine::Connection

Events

post_init connection_completed receive_data(data)

unbind

Methods

close_connectionclose_connection_after_writing

Un solo hilo para el reactor

EM#deferrequire 'eventmachine'require 'thread'

EM.run do EM.add_timer(1) do puts "Ejecución de hilo principal => #{Thread.current}" EM.stop_event_loop end EM.defer do puts "Ejecución en segundo hilo => #{Thread.current}" endend

EM#defer

EM#defer con Callbackrequire 'eventmachine'

EM.run do

operation = proc do 5 + 5 end

callback = proc do |count| puts "5 + 5 == #{count}" EM.stop end EM.defer(operation, callback)

end

EM#defer con Callback

EM#defer con Callback

Un ejemplo más práctico con...

gem install eventmachine_httpserver

Ahora si...

gem install em-websockets

Pero antes un repaso...

Arquitectura HTTP

Ajax (Pull)

Comet (Push)

HTML 5 WebSockets

HTML 5 WebSockets

WebSockets Events

Chat Server con em-websockets :-)

Esta presentación se hizo con

Si la quieres hazme followy solicítamela...

Gracias por su atención

@CarlosForero