78
Realtime Web Apps In 2014 & Beyond Phil @leggetter

Realtime Web Apps in 2014 & Beyond

Embed Size (px)

DESCRIPTION

It has been possible to instantly push information from a web server to a web browser for at least 10 years, but this technology has finally gone mainstream thanks to technologies like WebSockets and solutions like SignalR, socket.io, Faye and Pusher. In this sessions I'll cover the past, present and future of client/server communication technology, the realtime web and provide a number of use cases and demonstrations of how the technology is actually used today (it's not just chat and spaceship games).

Citation preview

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