node.js – Eine Einführung – Was ist node.js?



node.js – Eine Einführung – Was ist node.js?

0 0


webmmr-nodejs

Standup presentation for #webmmr on Node.js

On Github tmuellerleile / webmmr-nodejs

node.js

Eine Einführung

Was ist node.js?

  • serverseitiges JavaScript
  • eine Lösung für das C10K-Problem
  • der Nachfolger von PHP|RoR|.*

Exkurs: C10K

  • Wie arbeitet ein HTTP-Server Client-Requests ab?→ Traditionell (Apache/mpm_prefork): Viele, viele Unterprozesse
  • Was passiert bei 10.000+ (= „10K“) simultanen Anfragen?→ Speicherverbrauch und Prozessmanagement-Overhead explodieren

Exkurs: C10K

  • Alternativer Ansatz: Event Loops (nginx, lighttpd, Apache/mpm_event, node.js)
  • Zentraler Vorteil: Moderate Steigerung in Speicherverbrauch und CPU-Last

Weltweites Warten

‚Moderne‘ Webanwendungen warten auf

  • Datenbanken
  • Dateisysteme
  • externe Services
  • User-Interaktion

Events in node.js

Grundidee:

  • Frage Datenbank X
  • ... (Mach‘ irgendetwas anderes) ...
  • Wenn das Ergebnis der Abfrage feststeht, verarbeite es weiter

Was also ist node.js?

  • ein event-basiertes Framework für die Erstellung hochperformanter Server-Anwendungen (HTTP/TCP/UDP)
  • JavaScript-basierte API
  • plattformunabhängig (*n*x, Win) durch Googles V8 + eigene Library libuv
  • im weiteren Sinne: ein Ökosystem von Modulen rund um den node.js-Kern

Geschichte

  • ‚erfunden‘ 2009 von Ryan Dahl
  • Aktueller Maintainer: Isaac Z. Schlueter
  • Open Source unter dem Dach (und der Kontrolle) von Joyent
  • Aktuelle Version 0.10.4 – noch nicht 1.0 aber hinreichend stabil

Einsatzgebiet

  • leichtgewichtige Serveranwendungen mit Echtzeit-Anforderungen
  • eher für APIs als für ‚vollgewichtige‘ Applikationen
  • durchaus auch für Prototyping
  • „Faustregel“:
    • I/O bound → JA
    • CPU bound → NEIN

Warum node.js?

  • JS-Kenntnisse aus der Frontend-Programmierung können für den Backend-Bereich wiederverwendet werden → write once, run everywhere
  • Performance:
    • JS als Gewinner der neuen ‚Browser wars‘
    • JSON als das Austauschformat

Praxis

ein Webchat basierend auf WebSockets

ACHTUNG: Nicht zu Hause verwenden! (Sicherheit, Barrierefreiheit, Fehlerbehandlung...)

Server:

var io = require('socket.io').listen(8080);

io.sockets.on('connection', function (socket) {
  socket.on('msg', function (data) {
    io.sockets.emit('msg', data);
  });
});
            

Client:

<html>
  <body>
    <div id="chat"></div>
    <form>
      <input id="nick" />: <input id="msg" />
    </form>
    <script src="socket.io.js"></script>
    <script>
      var socket = io.connect('http://localhost:8080');
      socket.on('msg', function (data) {
        $('#chat').append('<p><strong>' + data.nick + '</strong> ' +
          data.msg + '</p>');
      });
      $('#msg').keydown(function(event) {
        if (event.which == '13') {
          event.preventDefault();
          socket.emit('msg', { nick: $('#nick').val(), msg: $('#msg').val() });
          $('#msg').val('');
        }
      });
    </script>
  <body>
<html>
            

Demo

Und jetzt?

Fragen?

@tmuellerleile