wordpress realtime - wordcamp são paulo 2015

Post on 18-Jan-2017

2.906 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

real time

Fernando DaciukFullStack Engineer

npm install fdaciuk

zimp.me

github.com/wpbrasil/odin

da2k.com.br

JAVASCRIPTNINJA

eventick.com.br/curso-javascript-ninja

What isreal time?real time?What is

Process that automatesupdating data

Give meexamples!

Data needs to beupdated...

interaction!without user

interaction!without user

1. fast

2. self-updating

How todo that?How todo that?

pooling

Are wethere yet?

function update() {

$.get('/api/product/123')

.done(function(data) {

$('#price').text(data.price);

setTimeout(update, 15000);

});

}

pooling

function update() {

$.get('/api/product/123')

.done(function(data) {

$('#price').text(data.price);

setTimeout(update, 15000);

});

}

functioncreate update

function update() {

$.get('/api/product/123')

.done(function(data) {

$('#price').text(data.price);

setTimeout(update, 15000);

});

}make an

ajax request

function update() {

$.get('/api/product/123')

.done(function(data) {

$('#price').text(data.price);

setTimeout(update, 15000);

});

}update price and

run again after 15s

1. fast

2. self-updating

so fast!It is notso fast!It is not

Client requestsserver

00:00 - GET /api/product/123

Server respondsto client

00:02 - RESPONSE { price: 100}

Server changes dataafter 3s

00:05 - { price: 120}

Client waits 15sbefore request again

00:17 - GET /api/product/123

What is thebetter way?

What is the

socketsweb

the data...Server sends

like

The information

magic!

appears...

Are youready?Are youready?

But, how does it work?

That sounds good!

CLIENTSIDE

.emit()

streamtweet

socket.io-playgroundgithub.com/fdaciuk

npmjs.org/package/node-tweet-stream

var config = require('./config.json');

var app = require('express')();

var serveStatic = require('serve-static');

var server = require('http').Server(app);

var io = require('socket.io')(server);

var tw = require('node-tweet-stream')(config);

app.js

adddependencies

var config = require('./config.json');

var app = require('express')();

var serveStatic = require('serve-static');

var server = require('http').Server(app);

var io = require('socket.io')(server);

var tw = require('node-tweet-stream')(config);

app.js

adddependencies

{

"consumer_key": "CONSUMER_KEY",

"consumer_secret": "CONSUMER_SECRET",

"token": "TOKEN",

"token_secret": "TOKEN_SECRET"

}

config.json

var config = require('./config.json');

var app = require('express')();

var serveStatic = require('serve-static');

var server = require('http').Server(app);

var io = require('socket.io')(server);

var tw = require('node-tweet-stream')(config);

app.js

adddependencies

var config = require('./config.json');

var app = require('express')();

var serveStatic = require('serve-static');

var server = require('http').Server(app);

var io = require('socket.io')(server);

var tw = require('node-tweet-stream')(config);

app.js

adddependencies

app.use(serveStatic(__dirname + '/public'));

app.get('/', function(req, res) {

res.sendFile(__dirname + '/public/index.html');

});

server.listen(3000);

app.js

Createlocal server

io.on('connection', function(socket) {

console.log('socket.io connected!');

tw.track('wordcampsp');

tw.on('tweet', function(tweet) {

socket.emit('tweet', tweet);

});

});

app.js

socket.ioconfiguration

io.on('connection', function(socket) {

console.log('socket.io connected!');

tw.track('wordcampsp');

tw.on('tweet', function(tweet) {

socket.emit('tweet', tweet);

});

});

app.js

socket.ioconfiguration

io.on('connection', function(socket) {

console.log('socket.io connected!');

tw.track('wordcampsp');

tw.on('tweet', function(tweet) {

socket.emit('tweet', tweet);

});

});

app.js

socket.ioconfiguration

io.on('connection', function(socket) {

console.log('socket.io connected!');

tw.track('wordcampsp');

tw.on('tweet', function(tweet) {

socket.emit('tweet', tweet);

});

});

app.js

socket.ioconfiguration

io.on('connection', function(socket) {

console.log('socket.io connected!');

tw.track('wordcampsp');

tw.on('tweet', function(tweet) {

socket.emit('tweet', tweet);

});

});

app.js

socket.ioconfiguration

io.on('connection', function(socket) {

console.log('socket.io connected!');

tw.track('wordcampsp');

tw.on('tweet', function(tweet) {

socket.emit('tweet', tweet);

});

});

app.js

socket.ioconfiguration

<!DOCTYPE html>

<html>

...

<body>

<ul data-js="tweets"></ul>

<script src="/socket.io/socket.io.js"></script>

<script src="js/main.js"></script>

</body>

</html>

public/index.html

<!DOCTYPE html>

<html>

...

<body>

<ul data-js="tweets"></ul>

<script src="/socket.io/socket.io.js"></script>

<script src="js/main.js"></script>

</body>

</html>

public/index.html

<!DOCTYPE html>

<html>

...

<body>

<ul data-js="tweets"></ul>

<script src="/socket.io/socket.io.js"></script>

<script src="js/main.js"></script>

</body>

</html>

public/index.html

var socket = io('http://localhost:3000');

var $tweets = document.querySelector('[data-js="tweets"]');

socket.on('tweet', function(data) {

$tweets.innerHTML += '<li>' + data.text + '<li>';

});

public/js/main.js

var socket = io('http://localhost:3000');

var $tweets = document.querySelector('[data-js="tweets"]');

socket.on('tweet', function(data) {

$tweets.innerHTML += '<li>' + data.text + '<li>';

});

public/js/main.js

var socket = io('http://localhost:3000');

var $tweets = document.querySelector('[data-js="tweets"]');

socket.on('tweet', function(data) {

$tweets.innerHTML += '<li>' + data.text + '<li>';

});

public/js/main.js

var socket = io('http://localhost:3000');

var $tweets = document.querySelector('[data-js="tweets"]');

socket.on('tweet', function(data) {

$tweets.innerHTML += '<li>' + data.text + '<li>';

});

public/js/main.js

var socket = io('http://localhost:3000');

var $tweets = document.querySelector('[data-js="tweets"]');

socket.on('tweet', function(data) {

$tweets.innerHTML += '<li>' + data.text + '<li>';

});

public/js/main.js

?

!socket.io-emittersocket.io-redis

CLIENTSIDE

emit()

+ socket.io-emitter

socket.io-redis

Installingdependencies

{

"require": {

"rase/socket.io-emitter": "^0.7.0"

}

}

composer.json

composer require rase/socket.io-emitter

terminal

Install “redis-server”on your operating system

Now, we need a simpleNodeJS Application

var io = require('socket.io')(3000);

io.adapter(require('socket.io-redis')());

io.on('connection', function() {

console.log('Connected!');

});

app.js

PHP can’t emit

events to client

var io = require('socket.io')(3000);

io.adapter(require('socket.io-redis')());

io.on('connection', function() {

console.log('Connected!');

});

app.js

require_once './vendor/autoload.php';

$id = get_the_ID();

$views = (int) get_post_meta( $id, 'views', true );

$views++;

update_post_meta( $id, 'views', $views );

$emitter = new SocketIO\Emitter();

$emitter->emit( 'post views', $id, $views );

echo $views;

single.php

require_once './vendor/autoload.php';

$id = get_the_ID();

$views = (int) get_post_meta( $id, 'views', true );

$views++;

update_post_meta( $id, 'views', $views );

$emitter = new SocketIO\Emitter();

$emitter->emit( 'post views', $id, $views );

echo $views;

single.php

require_once './vendor/autoload.php';

$id = get_the_ID();

$views = (int) get_post_meta( $id, 'views', true );

$views++;

update_post_meta( $id, 'views', $views );

$emitter = new SocketIO\Emitter();

$emitter->emit( 'post views', $id, $views );

echo $views;

single.php

require_once './vendor/autoload.php';

$id = get_the_ID();

$views = (int) get_post_meta( $id, 'views', true );

$views++;

update_post_meta( $id, 'views', $views );

$emitter = new SocketIO\Emitter();

$emitter->emit( 'post views', $id, $views );

echo $views;

single.php

require_once './vendor/autoload.php';

$id = get_the_ID();

$views = (int) get_post_meta( $id, 'views', true );

$views++;

update_post_meta( $id, 'views', $views );

$emitter = new SocketIO\Emitter();

$emitter->emit( 'post views', $id, $views );

echo $views;

single.php

require_once './vendor/autoload.php';

$id = get_the_ID();

$views = (int) get_post_meta( $id, 'views', true );

$views++;

update_post_meta( $id, 'views', $views );

$emitter = new SocketIO\Emitter();

$emitter->emit( 'post views', $id, $views );

echo $views;

single.php

var socket = io('http://localhost:3000');

socket.on('post views', function(id, views) {

$('#post-' + id).text(views);

});

main.js

var socket = io('http://localhost:3000');

socket.on('post views', function(id, views) {

$('#post-' + id).text(views);

});

main.js

var socket = io('http://localhost:3000');

socket.on('post views', function(id, views) {

$('#post-' + id).text(views);

});

main.js

var socket = io('http://localhost:3000');

socket.on('post views', function(id, views) {

$('#post-' + id).text(views);

});

main.js

var socket = io('http://localhost:3000');

socket.on('post views', function(id, views) {

$('#post-' + id).text(views);

});

main.js

the box!Think outsidethe box!Think outside

Fernando DaciukFullStack Engineer

Thanks!

/fdaciuk/talks npm install fdaciuk

top related