GETTING DIRTY WITH 0.7


SOCKET.IO
HELLO
 > WHOAMI
{
      "name": "socket.io"
    , "version": "0.7.0"
    , "description": "Real time apps made cross-browser & easy with a
        WebSocket-like API"
    , "keywords": ["websocket", "realtime", "socket.io", "comet", "ajax"]
    , "author": "Guillermo Rauch <guillermo@learnboost.com>"
    , "contributors": [
          { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }
        , { "name": "Arnout Kazemier", "email": "info@3rd-eden.com" }
      ]
    , "repository":{
          "type": "git"
        , "url": "https://github.com/LearnBoost/Socket.IO-node.git"
      }
    , "dependencies": {}
    , "main": "index"
    , "engines": { "node": ">= 0.4.0" }
}
STALK ME ON TWITTER

@3rdEden

  FORK ME ON GITHUB

@3rd-Eden
WHAT IS SOCKET.IO
open source
REAL TIME
DIRTY
FAST
F*CKING AWESOME
CROSS BROWSER
CROSS BROWSER
INCLUDING MOBILE & INTERNET EXPLORER 5
CROSS BROWSER
    ORLY? YA RLY
web socket
web socket

flash socket
web socket

flash socket

html file (forever iframe)
web socket

flash socket

html file (forever iframe)

xhr multipart
web socket

flash socket

html file (forever iframe)

xhr multipart

xhr polling
web socket

flash socket

html file (forever iframe)

xhr multipart

xhr polling

jsonp polling
community
      WATCHERS    2750+
         FORKS    250+
  PULL REQUESTS    110+
GROUPS MEMBERS    1000~
NODE CAMP USERS



Y U NO FORK
WHATʼS NEW IN 0.7
THE LESSONS WE LEARNED FROM 0.6
COMPLETE API
  REWRITE
var io = require(ʻsocket.ioʼ)
  , http = require(ʻhttpʼ);

var s = http.createServer(function(q,r)
{r.writeHead(200);r.end(ʻsupʼ)});

s.listen(80)
io.listen(s); // uses existing server
var io = require(ʻsocket.ioʼ)
  , http = require(ʻhttpʼ);

var s = http.createServer(function(q,r)
{r.writeHead(200);r.end(ʻsupʼ)});

s.listen(80)
io.listen(s); // uses existing server


var io = require(ʻsocket.ioʼ);
io.listen(80); // creates one for us
var io = require(ʻsocket.ioʼ).listen();

// express styled configuration
io.configure(ʻdevelopmentʼ, function(){
  io.set(ʻlog levelʼ, 3);
});
MULTIPLE
PROCESSES
NEW PROTOCOL
MESSAGE FLAGS
  FIRE AND FORGET, JSON




                 NEW PROTOCOL
io.sockets.on(ʻconnectionʼ, function (socket) {
  socket.volatile.send(ʻpew pewʼ);
  socket.json.send([{nodecamp:ʻftwʼ}]);
};




                              NEW PROTOCOL
ACKNOWLEDGEMENTS
 BETWEEN CLIENT & SERVER, SERVER & CLIENT




                          NEW PROTOCOL
// server side
io.sockets.on(ʻconnectionʼ, function (socket) {
  socket.send(ʻbyeʼ, function () {
   // ack
  });
});
// client side
var socket = io.connect();
socket.send(ʻhiʼ, function () {
  // ack
});
                              NEW PROTOCOL
NAMESPACING
   MULTIPLEXING




             NEW PROTOCOL
// server side
io.sockets.on(ʻconnectionʼ, function (socket) {
  socket.send(ʻbyeʼ, function () {
   // ack
  });
});
// client side
var socket = io.connect();
socket.send(ʻhiʼ, function () {
  // ack
});
                              NEW PROTOCOL
HANDSHAKING
FUCK YEAH, SESSIONS SUPPORT




                  NEW PROTOCOL
EVENTS


    NEW PROTOCOL
CODE SHARING
MODULES ARE REUSED ON THE CLIENT & SERVER
TESTING
BOTH FOR THE CLIENT AND THE SERVER
“ONE MORE THING™”
           © STEVE JOBS
RELEASE
  THIS WEEK
Q          A
TALK NERDY TO ME
presentation.end(‘thanks’);

Socket.IO