Jugando con
websockets en

   Israel Gutiérrez
NodeJS
• Server side JavaScript
• Platform built over Chrome’s v8
• Event driven (asynchronous)
• Applications
 • Data-intensive (efficiency)
 • Real-time (websockets)
NodeJS architecture
npm

• node package manager
 • express (routing)
 • socket.io (websockets)
 • mongo (database drivers)
 • ...
Application stack
• HTTP server (or TCP-socket or
  websockets)
• Router
• Request handlers
 • Handle data received
 • View logic
HTTP server

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);
TCP server
var net = require('net');

var server = net.createServer(function (socket) {
  socket.write('Echo serverrn');
  socket.pipe(socket);
});

server.listen(1337, '127.0.0.1');
Modules
server.js
var http = require("http");

function start() {
  function onRequest(request, response) {
    console.log("Request received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;


index.js
var server = require("./server");

server.start();
Router and handlers
• You can program the routes based on
  request.url
      var server = require("./server");
      var router = require("./router");
      var requestHandlers = require("./requestHandlers");

      var handle = {}
      handle["/"] = requestHandlers.start;
      handle["/start"] = requestHandlers.start;
      handle["/upload"] = requestHandlers.upload;

      server.start(router.route, handle);




• I recommend using express (Sinatra like)
Templating

• ejs
• underscore
• jade
• ...
Websockets
• Canal de comunicación full duplex
  (bidireccional y a la vez) sobre TCP
• No hay cabeceras HTTP! (menos
  overhead)
• Aplicaciones que requieren interacciones
  en tiempo real
• URL tipo ws://
socket.io
• Websockets library
• Fallbacks
 • Flash
 • AJAX long polling
 • AJAX multipart streaming
 • Forever iframe
 • JSONP polling
socket.io support
    Desktop
•   Internet Explorer 5.5+
•   Safari 3+
•   Google Chrome 4+
•   Firefox 3+
•   Opera 10.61+


Mobile
• iPhone Safari
• iPad Safari
• Android WebKit
• WebOs WebKit
socket.io example
Server
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});



Client
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
References

• http://nodejs.org/
• http://www.nodebeginner.org/
• https://npmjs.org/
• http://socket.io/
• http://www.nodecloud.org/
Let’s do some fucking
        code!!!

Jugando con websockets en nodeJS

  • 1.
    Jugando con websockets en Israel Gutiérrez
  • 2.
    NodeJS • Server sideJavaScript • Platform built over Chrome’s v8 • Event driven (asynchronous) • Applications • Data-intensive (efficiency) • Real-time (websockets)
  • 3.
  • 4.
    npm • node packagemanager • express (routing) • socket.io (websockets) • mongo (database drivers) • ...
  • 5.
    Application stack • HTTPserver (or TCP-socket or websockets) • Router • Request handlers • Handle data received • View logic
  • 6.
    HTTP server var http= require("http"); http.createServer(function(request, response) {   response.writeHead(200, {"Content-Type": "text/plain"});   response.write("Hello World");   response.end(); }).listen(8888);
  • 7.
    TCP server var net= require('net'); var server = net.createServer(function (socket) { socket.write('Echo serverrn'); socket.pipe(socket); }); server.listen(1337, '127.0.0.1');
  • 8.
    Modules server.js var http =require("http"); function start() {   function onRequest(request, response) {     console.log("Request received.");     response.writeHead(200, {"Content-Type": "text/plain"});     response.write("Hello World");     response.end();   }   http.createServer(onRequest).listen(8888);   console.log("Server has started."); } exports.start = start; index.js var server = require("./server"); server.start();
  • 9.
    Router and handlers •You can program the routes based on request.url var server = require("./server"); var router = require("./router"); var requestHandlers = require("./requestHandlers"); var handle = {} handle["/"] = requestHandlers.start; handle["/start"] = requestHandlers.start; handle["/upload"] = requestHandlers.upload; server.start(router.route, handle); • I recommend using express (Sinatra like)
  • 10.
  • 11.
    Websockets • Canal decomunicación full duplex (bidireccional y a la vez) sobre TCP • No hay cabeceras HTTP! (menos overhead) • Aplicaciones que requieren interacciones en tiempo real • URL tipo ws://
  • 12.
    socket.io • Websockets library •Fallbacks • Flash • AJAX long polling • AJAX multipart streaming • Forever iframe • JSONP polling
  • 13.
    socket.io support Desktop • Internet Explorer 5.5+ • Safari 3+ • Google Chrome 4+ • Firefox 3+ • Opera 10.61+ Mobile • iPhone Safari • iPad Safari • Android WebKit • WebOs WebKit
  • 14.
    socket.io example Server var io= require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); Client <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script>
  • 15.
    References • http://nodejs.org/ • http://www.nodebeginner.org/ •https://npmjs.org/ • http://socket.io/ • http://www.nodecloud.org/
  • 16.
    Let’s do somefucking code!!!