Slide 1

Slide 1 text

+

Slide 2

Slide 2 text

Orientato agli eventi I/O asincrono Reactor pattern Google V8 Singolo thread

Slide 3

Slide 3 text

Websocket con fallback Semplice messaggistica

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

“In attesa di uno straniero...” “Stai parlando con uno straniero, salutalo!” Straniero: asl? Tu: 98 m antarctica Straniero: o_o” [Qualcuno lascia la chat]

Slide 6

Slide 6 text

Server

Slide 7

Slide 7 text

var waiting = []; // Lista client in attesa var couples = {}; // { // clientID: stranger, // strangerID: client // ... // }

Slide 8

Slide 8 text

var io = SocketIO.listen(server); // server è un server HTTP già inizializzato io.sockets.on('connection', function(client) { // ... });

Slide 9

Slide 9 text

io.sockets.on('connection', function(client) { if (waiting.length == 0) { waiting.push(client); client.emit('waiting'); } else { var stranger = waiting.pop(); couples[client.id] = stranger; couples[stranger.id] = client; client.emit('partner'); stranger.emit('partner'); } // ... });

Slide 10

Slide 10 text

io.sockets.on('connection', function(client) { // ... client.on('message', function(message) { couples[client.id].emit('message', message); }); // ... });

Slide 11

Slide 11 text

io.sockets.on('connection', function(client) { // ... client.on('disconnect', function() { if (stranger = couples[client.id]) { stranger.emit('left'); delete couples[stranger.id]; delete couples[client.id]; } }); });

Slide 12

Slide 12 text

Client

Slide 13

Slide 13 text

var socket = io.connect(); socket.on('waiting', function() { logMessage('Waiting for a stranger...'); }); socket.on('partner', function() { logMessage('You are now chatting with...'); }); socket.on('message', function(message) { logMessage(message); }); socket.on('left', function() { this.logMessage('Stranger has left...'); socket.disconnect(); });

Slide 14

Slide 14 text

var leaveConversation = function() { logMessage('You have left...'); socket.disconnect(); }; var sendMessage = function(message) { socket.emit('message', message); logMessage(message); };

Slide 15

Slide 15 text

Demo!