sockjs-krtconf
-
Upload
robert-poulson -
Category
Documents
-
view
286 -
download
1
Transcript of sockjs-krtconf
SockJSWebSocket emulation kept simple, stupid
Marek Majkowski
Tuesday, 8 November 11
The plan
• WebSockets
• SockJS
• Messaging models
Tuesday, 8 November 11
Load Balancer
Webserver
Webserver
Webserver
Message bus
@sockjshttp://sockjs.orggithub.com/sockjs
Tuesday, 8 November 11
#sockjs
Tuesday, 8 November 11
#sockjs
Tuesday, 8 November 11
#sockjs
WebSockets
hixie-75 4 5.0.0
hixie-76 4 (disabled)
6 5.0.1 11 (disabled)
hybi-07 6
hybi-10 7 14 10-dev
hybi-17 16-dev
Tuesday, 8 November 11
#sockjs
WebSockets
hixie-75 4 5.0.0
hixie-76 4 (disabled)
6 5.0.1 11 (disabled)
hybi-07 6
hybi-10 7 14 10-dev
hybi-17 16-dev
{{Tuesday, 8 November 11
#sockjs
FF and Proxies
CONNECT sockjs1.popcnt.org:80 HTTP/1.1Host: sockjs1.popcnt.orgProxy-Connection: keep-alive
GET /echo/855/duzzy2p1/websocket HTTP/1.1Upgrade: WebSocketConnection: UpgradeHost: sockjs1.popcnt.orgOrigin: http://sockjs.popcnt.orgSec-WebSocket-Key1: 22p/ D"47900%n7 r90.Sec-WebSocket-Key2: m49" 5 f 24772 Ra 0
GET /echo/070/lm6wwjpr/websocket HTTP/1.1Host: sockjs1.popcnt.orgUser-Agent: [...] Gecko/20100101 Firefox/6.0.2Accept: text/html,application/xhtml [...]Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip, deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Sec-WebSocket-Version: 7Sec-WebSocket-Origin: http://sockjs.popcnt.orgSec-WebSocket-Key: bzG4fOYXabSiy42uFj6vjA==Pragma: no-cacheCache-Control: no-cacheUpgrade: websocketConnection: Upgrade
HTTP/1.0 400 Bad RequestServer: squid/2.7.STABLE9Date: Wed, 21 Sep 2011 06:16:10 GMTContent-Type: text/htmlContent-Length: 1943X-Squid-Error: ERR_INVALID_REQ 0X-Cache: MISS from mrstuConnection: close
Tuesday, 8 November 11
#sockjs
• #1 Realtime web: Not there yet!
Tuesday, 8 November 11
#sockjs
SockJS
Load Balancer
Webserver
Webserver
Webserver
Message bus
Tuesday, 8 November 11
#sockjs
SockJS
1. WebSocket like API
2. Fallbacks
3. Cross domain support
4. Scalability explained
5. Specified protocol, polyglot
6. No messaging model
Tuesday, 8 November 11
#sockjs
SockJS
1. WebSocket like API
2. Fallbacks
3. Cross domain support
4. Scalability explained
5. Specified protocol, polyglot
6. No messaging model
Tuesday, 8 November 11
#sockjs
WebSocket like API
<script> var sock = new SockJS('http://mydomain.com/my_prefix'); sock.onopen = function() { console.log('open'); }; sock.onmessage = function(e) { console.log('message', e.data); }; sock.onclose = function() { console.log('close'); };</script>
Tuesday, 8 November 11
#sockjs
WebSocket like APIvar http = require('http');var sockjs = require('sockjs');
var echo = sockjs.createServer(sockjs_opts);echo.on('connection', function(conn) { conn.on('data', function(message) { conn.write(message); }); conn.on('close', function() {});});
var server = http.createServer();echo.installHandlers(server, {prefix:'[/]echo'});server.listen(9999, '0.0.0.0');
Tuesday, 8 November 11
#sockjs
SockJS
1. WebSocket like API
2. Fallbacks
3. Cross domain support
4. Scalability explained
5. Specified protocol, polyglot
6. No messaging model
Tuesday, 8 November 11
#sockjs
Fallbacks
Tuesday, 8 November 11
#sockjs
SockJS
1. WebSocket like API
2. Fallbacks
3. Cross domain support
4. Scalability explained
5. Specified protocol, polyglot
6. No messaging model
Tuesday, 8 November 11
#sockjs
Cross domain
Load Balancer
Webserver
Webserver
Webserver
Message bus
Tuesday, 8 November 11
#sockjs
Cross domain
Load Balancer
Webserver
Webserver
Webserver
Database
Load Balancer
Asyncserver
Messagebus
Tuesday, 8 November 11
#sockjs
SockJS
1. WebSocket like API
2. Fallbacks
3. Cross domain support
4. Scalability explained
5. Specified protocol, polyglot
6. No messaging model
Tuesday, 8 November 11
#sockjs
Load blancer
Load Balancer
Webserver
Webserver
Webserver
Message bus
Tuesday, 8 November 11
#sockjs
?Load blancer
Load Balancer
Webserver
Webserver
Webserver
Message bus
Tuesday, 8 November 11
#sockjs
Load balancer
var sockjs_opts = { [...] disabled_transports: ['websocket']};
Tuesday, 8 November 11
#sockjs
Sticky sessions
Load Balancer
Webserver
Webserver
Webserver
Message bus
• prefix based
• JSESSIONID cookie
Tuesday, 8 November 11
#sockjs
Sticky sessions
var sockjs_opts = { [...] cookies: true};
Tuesday, 8 November 11
#sockjs
Deployment
Load Balancer
Webserver
Webserver
Webserver
Message bus
Tuesday, 8 November 11
#sockjs
Load Balancer
Webserver
Webserver
Webserver
Database
Load Balancer
Asyncserver
Messagebus
Deployment
Tuesday, 8 November 11
#sockjs
ws://
Load Balancer
Webserver
Webserver
Webserver
Message bus
ws:// ws://
Load Balancer
SockJSproxy
Deployment
Tuesday, 8 November 11
#sockjs
SockJS
1. WebSocket like API
2. Fallbacks
3. Cross domain support
4. Scalability explained
5. Specified protocol, polyglot
6. No messaging model
Tuesday, 8 November 11
#sockjs
SockJS protocol
• XXX screenshot
Tuesday, 8 November 11
#sockjs
QUnit tests
Tuesday, 8 November 11
#sockjs
Polyglot
• Server side:
• simple, testable
• Supported:
• Node.js, Erlang, LUA, Ruby*
Tuesday, 8 November 11
#sockjs
SockJS
1. WebSocket like API
2. Fallbacks
3. Cross domain support
4. Scalability explained
5. Specified protocol, polyglot
6. No messaging model
Tuesday, 8 November 11
#sockjs
Transport
Pub/Sub WorkQueuesPresenceValue +
Updates
No messaging model
Tuesday, 8 November 11
#sockjs
Transport
Pub/Sub WorkQueuesPresenceValue +
Updates
No messaging model
Tuesday, 8 November 11
#sockjs
Load Balancer
Webserver
Webserver
Webserver
Database
Service
Web Messaging Service
Tuesday, 8 November 11
#sockjs
Load Balancer
Webserver
Webserver
Webserver
Database
Service
Web Messaging Service
Tuesday, 8 November 11
#sockjs
Tuesday, 8 November 11
#sockjs
Google App Engine
• Simplex
• No broadcast
• No presence
userApp
Tuesday, 8 November 11
#sockjs
PubNub
• Duplex
• Broadcast
• No permissions
• No identity
subscribe("/topic")publish("/topic")
App
Tuesday, 8 November 11
#sockjs
Pusher
• Simplex
• Broadcast
• Permissions *
• Identity *
• Presence *
App
publish("/topic") subscribe("/topic")
Tuesday, 8 November 11
#sockjs
Tuesday, 8 November 11
#sockjs
Chat app
• /chat
• /roster
Tuesday, 8 November 11
#sockjs
Chat app
• /chat
• /roster
Tuesday, 8 November 11
#sockjs
Chat app
• /chat
• /roster
Tuesday, 8 November 11
#sockjs
1. Authorisation
2. Value + updates
3. Presence
App
subscribe("/chat")subscribe("/roster")
index.html
Tuesday, 8 November 11
#sockjs
1. Authorisation
2. Value + updates
3. Presence
Tuesday, 8 November 11
#sockjs
Authorization
App
subscribe("/chat")subscribe("/roster")
index.html
GET
Tuesday, 8 November 11
#sockjs
App
2. identity and permissions
4.
3. token
token
1. GET
Authorization
Tuesday, 8 November 11
#sockjs
1. Authorisation
2. Value + updates
3. Presence
Tuesday, 8 November 11
#sockjs
V+U: Application
subscribe("/chat")
…updates from "chat"…
get historical data for "/chat"
App
[...]<dwww> Version/11.51<majek> ah, boring then.<dwww> i copypasted what qunit page reports<dwww> ;)<majek> No browser works on your computer :)
Tuesday, 8 November 11
#sockjs
V+U: Application
}
subscribe("/chat")
…updates from "chat"…
get historical data for "/chat"
App
[...]<dwww> Version/11.51<majek> ah, boring then.<dwww> i copypasted what qunit page reports<dwww> ;)<majek> No browser works on your computer :)
Tuesday, 8 November 11
#sockjs
1. Authorisation
2. Value + updates
3. Presence
Tuesday, 8 November 11
#sockjs
Presence naively
subscribe("/chat")
subscribe("/roster")
send("/roster","Marek entered")
…updates from "chat"…
…updates from "roster"…
Tuesday, 8 November 11
#sockjs
Presence naively
subscribe("/chat")
subscribe("/roster")
send("/roster","Marek entered")
…updates from "chat"…
…updates from "roster"…
Tuesday, 8 November 11
#sockjs
Presence naively
subscribe("/chat")
subscribe("/roster")
send("/roster","Marek entered")
…updates from "chat"…
…updates from "roster"…
}
Tuesday, 8 November 11
#sockjs
Service?
Load Balancer
Webserver
Webserver
Webserver
Database
Service
Tuesday, 8 November 11
#sockjs
SockJS
Message bus
Application
Messaging
Web server
Application
Messaging
Web server
Tuesday, 8 November 11
#sockjs
• #3 Realtime web: Not there yet!
Tuesday, 8 November 11
#sockjs
Tuesday, 8 November 11
#sockjs
Tuesday, 8 November 11
#sockjs
@sockjs
http://sockjs.orggithub.com/sockjs/sockjs-client
Tuesday, 8 November 11
#sockjs
Tuesday, 8 November 11