Node.js – Superfast Serverside JavaScript – Was ist Node.js?



Node.js – Superfast Serverside JavaScript – Was ist Node.js?

0 0


node.js-presentation


On Github StefanSchwartze / node.js-presentation

Node.js

Superfast Serverside JavaScript

Von Stefan Schwartze / René Bannat

Inhalt

Was ist Node.js? Funktionsweise Vorteile Nachteile Beispielapplikation: Webchat Beispiele für Implementationen

Was ist Node.js?

  • Serverseitige Plattform für Netzwerkanwendungen
  • open source
  • cross-platform
  • basiert auf Chrome's V8 Javascript Engine
  • Ereignisgesteuerte Architektur

History

  • erste Veröffentlichung für Linux 2009 von Ryan Dahl/Joyent
  • Node Package Manager eingeführt 2011
  • Unterstützung für Windows Juli 2011

Chrome's V8 Engine

  • in C++ entwickelt
  • Just-In-Time Kompilierung
  • Optimierungen wie Inline Caching und automatische Speicherbereinigung
  • hohe Performance

Funktionsweise

Ereignisgesteuerte Architektur

  • Beispiel: Rezeption Doktor
  • Events in Event Queue
  • in Event Loop hintereinander abgearbeitet
  • Antwort als Callback
  • ein einziger Thread für alle Anfragen

Events vs. Threads

Events vs. Threads

Events vs. Threads

  • bei Thread Modell für jede Verbindung eigener Thread
  • Anzahl der Threads begrenzt
  • Abarbeitung von Event Handlern schneller als mehrere Threads

Beispiel Webserver HTTP

var http = require('http');
http.createServer(function (req, res) {
	res.writeHead(200, {'Content-Type': 'text/plain'});
	res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Websockets

  • bidirektionale Verbindung zwischen Webanwendung und Server
  • basieren auf TCP
  • kein Request vom Client nötig, da offene Verbindung
  • -> Header fällt bei allen Anfragen > 1 weg

Beispiel Webserver TCP

var net = require('net');

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

server.listen(1337, '127.0.0.1');

Vorteile

  • viele gleichzeitige Verbindungen -> hohe Skalierbarkeit
  • keine Deadlocks
  • benötigt weniger Arbeitsspeicher -> performanter
  • eine Sprache für Frontend und Backend

Nachteile

  • nicht geeigent für rechenintensive Operationen
  • keine Laufzeitfehlererkennung
  • ein Fehler im Code kann gesamten Server lahmlegen, da nur 1 Thread

Beispielapplikation: Webchat

Beispiele für Implementierungen

  • Etherpad
  • PayPal, von Java zu Kraken.js
  • Rdio, Synchronisierung von mehreren Devices
  • Trello
  • Uber, Probleme mit vielen gleichzeitigen Fahrzeuganfragen

Beispiel Uber

http://www.joyent.com/developers/videos/node-js-office-hours-curtis-chambers-uber

Beispiel Uber

Quellen