Post on 15-Jan-2015
description
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