Transcript
Page 1: Realtime Web Apps in 2014 & Beyond

Realtime Web Apps

In 2014 & BeyondPhil @leggetter

Page 2: Realtime Web Apps in 2014 & Beyond
Page 3: Realtime Web Apps in 2014 & Beyond
Page 4: Realtime Web Apps in 2014 & Beyond

Realtime Web Apps

↓s/Web/Internet

↓Realtime Internet Apps

Page 6: Realtime Web Apps in 2014 & Beyond

The Internet...1. is the communications platform

2. is becoming the entertainment platform

Page 7: Realtime Web Apps in 2014 & Beyond
Page 8: Realtime Web Apps in 2014 & Beyond

When do we need Realtime?

Page 9: Realtime Web Apps in 2014 & Beyond

DataIs there a timely nature to the data?

Page 10: Realtime Web Apps in 2014 & Beyond
Page 11: Realtime Web Apps in 2014 & Beyond

User ExperienceIs there a timely nature to the experience?

Page 12: Realtime Web Apps in 2014 & Beyond

Realtime is required when there's aNeed or Demand for:

Up to date informationInteraction to maintain engagement

Page 13: Realtime Web Apps in 2014 & Beyond

These aren't new Needs orDemands

Page 14: Realtime Web Apps in 2014 & Beyond

HTTP, Browsers & Servers made

it Difficult

Page 15: Realtime Web Apps in 2014 & Beyond

What made it difficult?HTTP - request/response paradigmKeeping persistent HTTP connections aliveNo cross-browser XMLHttpRequest2 connection limitNo browser cross origin supportGeneral cross browser incompatibilities

Page 16: Realtime Web Apps in 2014 & Beyond
Page 17: Realtime Web Apps in 2014 & Beyond

Hacks & TricksJava AppletsFlashHTTP Hacks

Page 18: Realtime Web Apps in 2014 & Beyond

Driving Forces behind the Hacks?

Page 19: Realtime Web Apps in 2014 & Beyond
Page 20: Realtime Web Apps in 2014 & Beyond
Page 21: Realtime Web Apps in 2014 & Beyond
Page 22: Realtime Web Apps in 2014 & Beyond
Page 23: Realtime Web Apps in 2014 & Beyond

Realtime Going Mainstream

Page 24: Realtime Web Apps in 2014 & Beyond

A Realisation & Demonstration of

Value

Page 25: Realtime Web Apps in 2014 & Beyond

Accessible Realtime Technology

Page 26: Realtime Web Apps in 2014 & Beyond

Improved Server PowerProcessors and Memory are cheaper & fasterMore data can be processesConnections can be dealt withScaling is easier

Page 27: Realtime Web Apps in 2014 & Beyond

Web Browser Capabilities andConsistency

Cross browser XMLHTTPRequest supportCORSServer Sent Events / EventSourceWebSocketWebRTC

Page 28: Realtime Web Apps in 2014 & Beyond

Software ChoiceLots of language & runtime optionsMore open source solutionsHosted services

Page 29: Realtime Web Apps in 2014 & Beyond
Page 30: Realtime Web Apps in 2014 & Beyond

Any Client Technology

Page 31: Realtime Web Apps in 2014 & Beyond
Page 32: Realtime Web Apps in 2014 & Beyond

Realtime Apps in 2014

Page 33: Realtime Web Apps in 2014 & Beyond

Notifications & Signalling

Page 34: Realtime Web Apps in 2014 & Beyond
Page 35: Realtime Web Apps in 2014 & Beyond

Internet ^5 Machine

0:48

Page 36: Realtime Web Apps in 2014 & Beyond

talky.io

Page 37: Realtime Web Apps in 2014 & Beyond

Receive message

var sock = new SockJS( 'http://localhost:9999/sockjs' );

sock.onmessage = function( e ) {

console.log( 'message', e.data );

};

Send Message

var http = require('http');

sockjs = require('sockjs');

var hello = sockjs.createServer();

hello.on( 'connection' , function( conn ) {

conn.write( 'hello SockJS' );

} );

var server = http.createServer();

hello.installHandlers( server, { prefix:'/sockjs' } );

server.listen( 9999, '0.0.0.0' );

Page 38: Realtime Web Apps in 2014 & Beyond

Simple Messaging SolutionsServer/Server

WebHooksClient/Server

WebSocket-only or HTTP-only solutions

Peer-to-Peer

SockJSEngine.IOPrimus

simpleWebRTCPeerJS

Page 39: Realtime Web Apps in 2014 & Beyond
Page 40: Realtime Web Apps in 2014 & Beyond

Lots of Data

Page 41: Realtime Web Apps in 2014 & Beyond
Page 42: Realtime Web Apps in 2014 & Beyond
Page 43: Realtime Web Apps in 2014 & Beyond

0:55

Page 44: Realtime Web Apps in 2014 & Beyond

Subscribe

var pusher = new Pusher( APP_KEY );

var channel = pusher.subscribe( 'game-overview' );

channel.bind( 'goal_scored', function( data ) {

// Handle Update

} );

channel.bind( 'time_updated', function( data ) {

} );

Publish

var pusher = new Pusher( APP_KEY );

var data = { team_id = 'manchester_city',

goals_scored: 2,

goal_scorer: 'Sergio Agüero' };

pusher.trigger( 'game-overview', 'goal_scored', data );

Page 45: Realtime Web Apps in 2014 & Beyond

PubSub SolutionsSelf Hosted

Hosted

Socket.IOFayeXSockets

GoInstantHydnaPubNubPusherRealtime.co

Page 46: Realtime Web Apps in 2014 & Beyond
Page 47: Realtime Web Apps in 2014 & Beyond

Complex Client/Server

Interactions

Page 48: Realtime Web Apps in 2014 & Beyond
Page 49: Realtime Web Apps in 2014 & Beyond
Page 50: Realtime Web Apps in 2014 & Beyond

Server

public class GameHub : Hub {

public void Move(Player p, int x, int y) {

// Check if move is allowed

// Call the broadcastMessage method to update clients.

Clients.All.playerMoved(p, x, y);

}

}

Client

$.connection.hub.start(); // async

var game = $.connection.gameHub;

game.client.playerMoved = function (player, x, y) {

// update game

};

game.server.move( me, x, y );

Page 51: Realtime Web Apps in 2014 & Beyond

RMI SolutionsSelf Hosted:

Hosted:SignalR on Windows Azure?

dNodeSignalRJava.rmi

Page 52: Realtime Web Apps in 2014 & Beyond
Page 53: Realtime Web Apps in 2014 & Beyond

Collaborating on Data

Page 54: Realtime Web Apps in 2014 & Beyond
Page 55: Realtime Web Apps in 2014 & Beyond
Page 56: Realtime Web Apps in 2014 & Beyond

Physical Collaborative Mapping

1:10

Page 57: Realtime Web Apps in 2014 & Beyond

DataSync

var myDataRef = new Firebase('https://my-app.firebaseio.com/');

myDataRef.push( {creator: '@leggetter', text: 'Not a Test!'} );

myDataRef.on( 'child_added', function(snapshot) {

// Add the data

});

myDataRef.on( 'child_changed', function(snapshot) {

// Update the data

});

myDataRef.on( 'child_removed', function(snapshot) {

// Remove the data

});

Page 58: Realtime Web Apps in 2014 & Beyond

Data Sync SolutionsSelf Hosted:

+ Hosted:

DerbyJSMeteorCouchDB pouchdb

FirebaseGoogle Drive Realtime APIGoInstantRealtime.coSimperium

Page 59: Realtime Web Apps in 2014 & Beyond
Page 60: Realtime Web Apps in 2014 & Beyond

Choosing a Solution

Page 61: Realtime Web Apps in 2014 & Beyond
Page 62: Realtime Web Apps in 2014 & Beyond
Page 63: Realtime Web Apps in 2014 & Beyond

Beyond

Page 64: Realtime Web Apps in 2014 & Beyond

Network InfrastructureReliablitySpeedBeyond HTTP

Page 65: Realtime Web Apps in 2014 & Beyond

More "Things"!

Page 66: Realtime Web Apps in 2014 & Beyond
Page 67: Realtime Web Apps in 2014 & Beyond

0:32

Page 68: Realtime Web Apps in 2014 & Beyond

And APIs...

Page 69: Realtime Web Apps in 2014 & Beyond

Use RealtimeTwilioSendGridMailChimpIron.ioGitHubTrello...

APIs for APIsFanout.io

Page 70: Realtime Web Apps in 2014 & Beyond
Page 71: Realtime Web Apps in 2014 & Beyond

IoT PlatformsSmartThingsNinjaBlocksEvryThingSKYNET.im

Page 72: Realtime Web Apps in 2014 & Beyond
Page 73: Realtime Web Apps in 2014 & Beyond

MQTT

MQTT is a machine-to-machine(M2M)/"Internet of Things"connectivity protocol.

MQTTHiveMQEclipse Paho

Page 74: Realtime Web Apps in 2014 & Beyond

Multi-Device Experiences

Page 75: Realtime Web Apps in 2014 & Beyond

Watch_Dogs

Page 76: Realtime Web Apps in 2014 & Beyond

1:07

Page 77: Realtime Web Apps in 2014 & Beyond

Realtime Internet Apps =

Internet of Things =

Web Browsers +Web Servers +Native Apps +

Devices +

Page 78: Realtime Web Apps in 2014 & Beyond

Thanks!

Questions?

Phil @leggetterBladeRunnerJS

j.mp/realtime-sotr14j.mp/realtime-tech-guide