Ruby EventMachine + em-WebSocket

33
Ruby EventMachine Y un pequeño ejemplo usando em-websockets @CarlosForero

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 of Ruby EventMachine + em-WebSocket

Page 1: Ruby EventMachine + em-WebSocket

Ruby EventMachineY un pequeño ejemplo usando

em-websockets

@CarlosForero

Page 2: Ruby EventMachine + em-WebSocket

Concurrencia

Page 3: Ruby EventMachine + em-WebSocket

Concurrencia usando hilos (Threads)

Page 4: Ruby EventMachine + em-WebSocket

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

Page 5: Ruby EventMachine + em-WebSocket

Concurrencia usando el Patrón Reactor (Reactor Pattern)

Page 6: Ruby EventMachine + em-WebSocket

Reactor Pattern vs Multithreading

Apache

Thread Based ServerEvent Driven Based Server

Page 7: Ruby EventMachine + em-WebSocket

Reactor Pattern vs Multithreading

Page 8: Ruby EventMachine + em-WebSocket

Reactor Pattern vs Multithreading

Page 9: Ruby EventMachine + em-WebSocket

Concurrencia usando el Patrón Reactor (Reactor Pattern)

Page 10: Ruby EventMachine + em-WebSocket

Reactor Pattern

Page 11: Ruby EventMachine + em-WebSocket

Ruby EventMachine

require 'eventmachine'

EM.run do

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

end

Page 12: Ruby EventMachine + em-WebSocket

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

Page 13: Ruby EventMachine + em-WebSocket

EventMachine::Connection

Page 14: Ruby EventMachine + em-WebSocket

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

Page 15: Ruby EventMachine + em-WebSocket

EventMachine::Connection

Events

post_init connection_completed receive_data(data)

unbind

Methods

close_connectionclose_connection_after_writing

Page 16: Ruby EventMachine + em-WebSocket

Un solo hilo para el reactor

Page 17: Ruby EventMachine + em-WebSocket

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

Page 18: Ruby EventMachine + em-WebSocket

EM#defer

Page 19: Ruby EventMachine + em-WebSocket

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

Page 20: Ruby EventMachine + em-WebSocket

EM#defer con Callback

Page 21: Ruby EventMachine + em-WebSocket

EM#defer con Callback

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

gem install eventmachine_httpserver

Page 22: Ruby EventMachine + em-WebSocket

Ahora si...

gem install em-websockets

Page 23: Ruby EventMachine + em-WebSocket

Pero antes un repaso...

Page 24: Ruby EventMachine + em-WebSocket

Arquitectura HTTP

Page 25: Ruby EventMachine + em-WebSocket
Page 26: Ruby EventMachine + em-WebSocket

Ajax (Pull)

Page 27: Ruby EventMachine + em-WebSocket
Page 28: Ruby EventMachine + em-WebSocket

Comet (Push)

Page 29: Ruby EventMachine + em-WebSocket

HTML 5 WebSockets

Page 30: Ruby EventMachine + em-WebSocket

HTML 5 WebSockets

Page 31: Ruby EventMachine + em-WebSocket

WebSockets Events

Page 32: Ruby EventMachine + em-WebSocket

Chat Server con em-websockets :-)

Page 33: Ruby EventMachine + em-WebSocket

Esta presentación se hizo con

Si la quieres hazme followy solicítamela...

Gracias por su atención

@CarlosForero