Rails 4 & server sent events
-
Upload
piotr-karbownik -
Category
Technology
-
view
5.007 -
download
0
description
Transcript of Rails 4 & server sent events
![Page 1: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/1.jpg)
Rails 4 & Server-Sent Events
Piotr Karbownik
![Page 2: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/2.jpg)
SSE - EventSource API
Server-Sent Events (SSE) is a HTML5 standard describing how servers can initiate data transmission towards clients once an initial client connection has been established.
Browsers: Firefox, Chrome, Opera, Safari
![Page 3: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/3.jpg)
SSE != Websockets
• SSE connections can only push data to the browser.
• It’s still HTTP - no new protocol
• Automatic reconnection
![Page 4: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/4.jpg)
SSE - applications
• Notifications
• Continuous data streams
• News feeds
![Page 5: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/5.jpg)
SSE – on the frontend
function newStream(){
var source = new EventSource('/streaming');
source.addEventListener('update', function(e) {
//do stuff
});
}
![Page 6: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/6.jpg)
SSE – on the frontend
function newStream(){
var source = new EventSource('/streaming');
source.onmessage (function(e) {
//do stuff
});
}
![Page 7: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/7.jpg)
EventSource Object Methods
onopen -When a connection to the server is opened
onmessage - When a message is received
onerror - When an error occurs
![Page 8: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/8.jpg)
SSE – message format
Sample: event: my_event data: {"username": „Peter"}
event - The event's type. If this is specified, an event will be dispatched on the browser to the listener for the specified event name.
data - field for the message. id - the event ID to set the EventSource object's last event ID value retry - The reconnection time to use when attempting to send the
event.
![Page 9: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/9.jpg)
Rails 4 - ActionController::Live
Live Streaming: the ability to send partial responses to the client immediately.
![Page 10: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/10.jpg)
What about the server?
Server must support:
• Long running requests
• Live streaming
• Concurrency
• Examples: Puma, Rainbows, Thin
![Page 11: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/11.jpg)
Config
environments /development.rb:
• config.cache_classes = true
• config.eager_load = true
database.yml
• pool == server max threads
• for Puma default is 16
![Page 12: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/12.jpg)
Sample code - 1
![Page 13: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/13.jpg)
Sample code
![Page 14: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/14.jpg)
Sample code - 2
![Page 15: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/15.jpg)
![Page 16: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/16.jpg)
Summary
• Easy to implement
• Real time
• Good for notifications
• Problems with client connections amount and status.
![Page 17: Rails 4 & server sent events](https://reader033.fdocuments.in/reader033/viewer/2022051400/5538c9724a7959c1688b47f6/html5/thumbnails/17.jpg)
…and the end
Sample apps:
https://github.com/cynamonium/srug-streamapp-2/
https://github.com/cynamonium/srug-streamapp-1