RailsConf Europe 2008 Juggernaut Realtime Rails
Alex MacCaw and Stuart Eccles
RailsConf Europe 2008 Juggernaut Realtime Rails Alex MacCaw and - - PowerPoint PPT Presentation
RailsConf Europe 2008 Juggernaut Realtime Rails Alex MacCaw and Stuart Eccles RailsConf Europe 2008 Juggernaut Realtime Rails Alex MacCaw and Stuart Eccles http://www.madebymany.co.uk/ server push HTTP HTTP GET/POST <html/>
Alex MacCaw and Stuart Eccles
Alex MacCaw and Stuart Eccles
http://www.madebymany.co.uk/
Client Server
HTTP GET/POST <html/> <script/>
Client Server
Written by Alex MacCaw in 2006 Published at http://juggernaut.rubyforge.org/ Latest versions at GitHub just for Edge Rails MIT License
Invisible Flash SWF Rails Plugin Juggernaut Server Client Messenger Broadcaster
r e s
r c e i n t e n s i v e
r e s
r c e i n t e n s i v e
not realtime
F i r e f
m e m
y i s s u e s
F i r e f
m e m
y i s s u e s
not cross- domain
F i r e f
m e m
y i s s u e s
not cross- domain IE clicking
F i r e f
m e m
y i s s u e s
not cross- domain IE clicking max 2 streams in IE
Flash 8 > 95% of all browsers cross-OS Prototype and JQuery versions
30k concurrent users and clustering support
client can subscribe to
Broadcast can be channel selected Broadcast can even be client selected
IP whitelist shared secrets authentication callbacks
client connect callback client disconnect callback
query server for list of clients
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
GET
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
OK
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
SUBSCRIBE
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX
callback
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX
SUBSCRIBE
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
callback
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
JSON MESSAGE
RJS
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
J SWonder-women has entered chat
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
J SWonder-women has entered chat
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
AJAX
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
JSON MESSAGE
RJS
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
J S J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
J S J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
J S J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
J S J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
SuperMan says ‘Hi!’ SuperMan says ‘Hi!’ SuperMan says ‘Hi!’
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
RAKE
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
RJS
JSON MESSAGE
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
J S J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
J S J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
J S J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
J S J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
Chat will be closing in 10 minutes! Chat will be closing in 10 minutes! Chat will be closing in 10 minutes!
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX DUPLEX
notification
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
callback
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
RJS
JSON MESSAGE
Rails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
J S J SRails Application
Juggernaut Rails Plugin
Juggernaut Push Server
DUPLEX DUPLEX
SuperMan has left the building! SuperMan has left the building!
script/plugin install \ http://juggernaut.rubyforge.org/svn/trunk/juggernaut sudo gem install juggernaut (includes json and eventmachine dependencies)
juggernaut -g juggernaut.yml juggernaut -c juggernaut.yml
<%= juggernaut %>
<%= javascript_include_tag :defaults, :juggernaut %> <html> <head> </head>
render :juggernaut do |page| page.replace 'person-45', :partial => 'person' end
<%= juggernaut(:channels => ['one', 'two', 'three']) %>
render :juggernaut => { :type => :send_to_channels, :channels => ['one'] } do |page| page.alert('Hello World') end
<%= juggernaut(:client_id => current_user.id) %>
render :juggernaut => { :type => :send_to_client, :client_id => @user.id } do |page| page.alert('Hello World') end
Juggernaut.show_clients
render_juggernaut('person_update.rjs')
Juggernaut.send_to_all(“alert(‘foo’);”)
Juggernaut.send_to_client(“alert(‘foo’);”, @user.id) Juggernaut.send_to_channel(“alert(‘foo’);”, @channel)
Don’t push huge amounts of HTML to the
Don’t push huge amounts of Javascript to the
the browser. In callbacks Juggernaut will pass the session id so you can use existing session information. Escape your user inputs!! XSS is very dangerous in a Push JavaScript world.
http://juggernaut.rubyforge.org/