RailsConf Europe 2008 Juggernaut Realtime Rails Alex MacCaw and - - PowerPoint PPT Presentation

railsconf europe 2008 juggernaut realtime rails
SMART_READER_LITE
LIVE PREVIEW

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/>


slide-1
SLIDE 1

RailsConf Europe 2008 Juggernaut Realtime Rails

Alex MacCaw and Stuart Eccles

slide-2
SLIDE 2

RailsConf Europe 2008 Juggernaut Realtime Rails

Alex MacCaw and Stuart Eccles

slide-3
SLIDE 3

http://www.madebymany.co.uk/

slide-4
SLIDE 4

server push

slide-5
SLIDE 5

HTTP

Client Server

HTTP GET/POST <html/> <script/>

slide-6
SLIDE 6

Server Push

Client Server

slide-7
SLIDE 7

what is Juggernaut?

slide-8
SLIDE 8

History

Written by Alex MacCaw in 2006 Published at http://juggernaut.rubyforge.org/ Latest versions at GitHub just for Edge Rails MIT License

slide-9
SLIDE 9

3 Components

Invisible Flash SWF Rails Plugin Juggernaut Server Client Messenger Broadcaster

slide-10
SLIDE 10

Juggernaut is also

slide-11
SLIDE 11

what do we want? This guy....

slide-12
SLIDE 12

what do we want? This guy....

slide-13
SLIDE 13

X-Men Character

slide-14
SLIDE 14

X-Men Character

slide-15
SLIDE 15

the other Juggernaut?

slide-16
SLIDE 16

real world users

slide-17
SLIDE 17

Collaboration

slide-18
SLIDE 18

Real Time Interaction

slide-19
SLIDE 19

Multiplayer Games

slide-20
SLIDE 20

Multiplayer Games

slide-21
SLIDE 21

Chat

slide-22
SLIDE 22

Real Time Activity Feeds

slide-23
SLIDE 23

Enhancing Traditional Media

slide-24
SLIDE 24

juggernaut competition

slide-25
SLIDE 25
slide-26
SLIDE 26

r e s

  • u

r c e i n t e n s i v e

slide-27
SLIDE 27

r e s

  • u

r c e i n t e n s i v e

not realtime

slide-28
SLIDE 28
slide-29
SLIDE 29

F i r e f

  • x

m e m

  • r

y i s s u e s

slide-30
SLIDE 30

F i r e f

  • x

m e m

  • r

y i s s u e s

not cross- domain

slide-31
SLIDE 31

F i r e f

  • x

m e m

  • r

y i s s u e s

not cross- domain IE clicking

slide-32
SLIDE 32

F i r e f

  • x

m e m

  • r

y i s s u e s

not cross- domain IE clicking max 2 streams in IE

slide-33
SLIDE 33

features

browser compatibility

Flash 8 > 95% of all browsers cross-OS Prototype and JQuery versions

slide-34
SLIDE 34

features

scale with eventmachine

30k concurrent users and clustering support

slide-35
SLIDE 35

features

channels

client can subscribe to

  • ne or more channels

Broadcast can be channel selected Broadcast can even be client selected

slide-36
SLIDE 36

features

authentication

IP whitelist shared secrets authentication callbacks

slide-37
SLIDE 37

features

callbacks

client connect callback client disconnect callback

slide-38
SLIDE 38

features

queries

query server for list of clients

slide-39
SLIDE 39

in pictures

slide-40
SLIDE 40

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

slide-41
SLIDE 41

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

slide-42
SLIDE 42

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

GET

slide-43
SLIDE 43

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

OK

slide-44
SLIDE 44

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

SUBSCRIBE

slide-45
SLIDE 45

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX

slide-46
SLIDE 46

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX

callback

slide-47
SLIDE 47

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX

SUBSCRIBE

slide-48
SLIDE 48

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

callback

slide-49
SLIDE 49

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

JSON MESSAGE

RJS

slide-50
SLIDE 50

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

J S
slide-51
SLIDE 51

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

J S
slide-52
SLIDE 52

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

J S

Wonder-women has entered chat

slide-53
SLIDE 53

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

J S

Wonder-women has entered chat

slide-54
SLIDE 54

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

slide-55
SLIDE 55

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

slide-56
SLIDE 56

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

AJAX

slide-57
SLIDE 57

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

JSON MESSAGE

RJS

slide-58
SLIDE 58

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

J S J S J S
slide-59
SLIDE 59

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

J S J S J S
slide-60
SLIDE 60

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

J S J S J S
slide-61
SLIDE 61

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

J S J S J S
slide-62
SLIDE 62

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

SuperMan says ‘Hi!’ SuperMan says ‘Hi!’ SuperMan says ‘Hi!’

slide-63
SLIDE 63

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

slide-64
SLIDE 64

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

slide-65
SLIDE 65

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

RAKE

slide-66
SLIDE 66

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

RJS

JSON MESSAGE

slide-67
SLIDE 67

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

J S J S J S
slide-68
SLIDE 68

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

J S J S J S
slide-69
SLIDE 69

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

J S J S J S
slide-70
SLIDE 70

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

J S J S J S
slide-71
SLIDE 71

Rails 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!

slide-72
SLIDE 72

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

slide-73
SLIDE 73

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

slide-74
SLIDE 74

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX DUPLEX

notification

slide-75
SLIDE 75

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

callback

slide-76
SLIDE 76

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

RJS

JSON MESSAGE

slide-77
SLIDE 77

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

J S J S
slide-78
SLIDE 78

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

J S J S
slide-79
SLIDE 79

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

J S J S
slide-80
SLIDE 80

Rails Application

Juggernaut Rails Plugin

Juggernaut Push Server

DUPLEX DUPLEX

SuperMan has left the building! SuperMan has left the building!

slide-81
SLIDE 81

Audience Participation

http://railsconf.madebymany.co.uk

slide-82
SLIDE 82

def code

slide-83
SLIDE 83

Partial Update Example

slide-84
SLIDE 84

Install Juggernaut

script/plugin install \ http://juggernaut.rubyforge.org/svn/trunk/juggernaut sudo gem install juggernaut (includes json and eventmachine dependencies)

slide-85
SLIDE 85

Start the Push Server

juggernaut -g juggernaut.yml juggernaut -c juggernaut.yml

slide-86
SLIDE 86

<%= juggernaut %>

View

<%= javascript_include_tag :defaults, :juggernaut %> <html> <head> </head>

slide-87
SLIDE 87

Controller

render :juggernaut do |page| page.replace 'person-45', :partial => 'person' end

slide-88
SLIDE 88

That’s it!

slide-89
SLIDE 89

Demo 1: Chat

slide-90
SLIDE 90

Subscribe to channels

<%= juggernaut(:channels => ['one', 'two', 'three']) %>

slide-91
SLIDE 91

Broadcast to channels

render :juggernaut => { :type => :send_to_channels, :channels => ['one'] } do |page| page.alert('Hello World') end

slide-92
SLIDE 92

Subscribe as a particular client

<%= juggernaut(:client_id => current_user.id) %>

slide-93
SLIDE 93

Broadcast to a particular client

render :juggernaut => { :type => :send_to_client, :client_id => @user.id } do |page| page.alert('Hello World') end

slide-94
SLIDE 94

Find connected clients

Juggernaut.show_clients

slide-95
SLIDE 95

Don’t want inline RJS?

render_juggernaut('person_update.rjs')

slide-96
SLIDE 96

Don’t Want RJS?

Juggernaut.send_to_all(“alert(‘foo’);”)

Juggernaut.send_to_client(“alert(‘foo’);”, @user.id) Juggernaut.send_to_channel(“alert(‘foo’);”, @channel)

slide-97
SLIDE 97

Demo 2: Google Maps

http://railsconf.madebymany.co.uk

slide-98
SLIDE 98

tips

slide-99
SLIDE 99

Don’t push huge amounts of HTML to the

  • browser. Trigger an AJAX request instead

Don’t push huge amounts of Javascript to the

  • browser. Trigger a function call already loaded by

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.

slide-100
SLIDE 100

Thank You!

http://juggernaut.rubyforge.org/

Q & A