17
Rails 4 & Server-Sent Events Piotr Karbownik

Rails 4 & server sent events

Embed Size (px)

DESCRIPTION

www.thesoftwarehouse.pl

Citation preview

Page 1: Rails 4 & server sent events

Rails 4 & Server-Sent Events

Piotr Karbownik

Page 2: Rails 4 & server sent events

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

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

SSE - applications

• Notifications

• Continuous data streams

• News feeds

Page 5: Rails 4 & server sent events

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

SSE – on the frontend

function newStream(){

var source = new EventSource('/streaming');

source.onmessage (function(e) {

//do stuff

});

}

Page 7: Rails 4 & server sent events

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

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

Rails 4 - ActionController::Live

Live Streaming: the ability to send partial responses to the client immediately.

Page 10: Rails 4 & server sent events

What about the server?

Server must support:

• Long running requests

• Live streaming

• Concurrency

• Examples: Puma, Rainbows, Thin

Page 11: Rails 4 & server sent events

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

Sample code - 1

Page 13: Rails 4 & server sent events

Sample code

Page 14: Rails 4 & server sent events

Sample code - 2

Page 15: Rails 4 & server sent events
Page 16: Rails 4 & server sent events

Summary

• Easy to implement

• Real time

• Good for notifications

• Problems with client connections amount and status.