Node.js
{{Infobox Software
| Name = Node.js
| Logo = 200px|Node.js Logo
| Hersteller = Ryan Lienhart Dahl
| Betriebssystem = Linux, Mac OS, Windows, Solaris
| AktuelleVersion = 0.6.17
| AktuelleVersionFreigabeDatum = 4. Mai 2012
| Kategorie = Framework
| Programmiersprache = C++, JavaScript
| Lizenz = MIT-Lizenz
| Website = [http://nodejs.org/ nodejs.org]
}}
Node.js ist ein serverseitiges Framework zum Erstellen von Server- und Konsolenanwendungen mit JavaScript. Im praktischen Einsatz läuft node.js serverseitig (siehe Client-Server-Modell). Es setzt mit der JavaScript-Engine V8 von Google eine sehr schnelle JavaScript-Implementierung ein, die JavaScript-Code vor der Ausführung in Maschinensprache übersetzt. Die Entwickler legen besonderen Wert auf die Skalierbarkeit des Frameworks, die vor allem eine große Anzahl gleichzeitiger Verbindungen ermöglichen soll.http://nodejs.org/about/
Architektur
Eine Besonderheit ist die ereignisgesteuerte Architektur, durch die der Programmablauf nicht durch Ein-/Ausgabeoperationen (zum Beispiel Datenbankzugriffe) blockiert wird. Das Ergebnis einer Operation, die in anderen Umgebungen blockieren würde, wird immer als Rückruffunktion (Callback) übermittelt. Aus diesem Grund wird nur ein Thread benötigt, wodurch auch kein Locking nötig ist und Race Conditions vermieden werden.
Besonders im Serverbetrieb ist die ereignisgesteuerte Architektur von Vorteil, da eine Node.js-Instanz so bei gleichem Arbeitsspeicher-Verbrauch erheblich mehr Verbindungen auf einmal aufrecht erhalten kann, als vergleichbare Anwendungen mit Ein-/Ausgabe-Architektur.
Module
Node.js hat einen schlanken Kern und lässt sich über Module erweitern: Node.js enthält einige Basismodule (Core), welche direkt in das Binärpaket kompiliert wurden. Dazu gehören neben dem Net-Modul für asynchronen Netzwerkzugriff auch Wrapper für das Dateisystem, Buffer, Timer und eine allgemein gehaltene Stream-Klasse. Module von Drittanbietern können ebenfalls benutzt werden, zum Beispiel über vorkompilierte Dateien mit der Dateinamenerweiterung .node oder in Form von einfachen JavaScript-Dateien. Die JavaScript-Module folgen dem CommonJS-Standard für Module und stellen somit über eine exports-Variable Zugriff auf Funktionen und Variablen des entsprechenden Moduls her.{{cite web|title=CommonJS Standard|url=http://www.commonjs.org/impl/|accessdate=15 Mai 2011}}
Durch Module lassen sich auch Abstraktionsschichten einbringen, wie zum Beispiel bei den Middleware-Frameworks connect oder express.[https://github.com/senchalabs/connect connect.js] auf github[http://expressjs.com/ express.js]
Zur Verwaltung der Module gibt es den Paketmanager npm, in dessen Repository sich über 5000 Pakete befinden.http://search.npmjs.org/ npmjs.org npm registry Dieser sorgt ähnlich wie RubyGems oder Python Eggs für die Installation (unter Berücksichtigung von Abhängigkeiten), Updates und das Kompilieren von Binärmodulen.
Beispiele
HTTP-Server-Version eines Hallo-Welt-Programmes in Node.js:var http = require('http');
http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World');
res.close();
}).listen(8000);
Ein weiteres Beispiel als einfacher TCP-Server, der alle auf dem Port 7000 empfangenen Daten unverändert zum Client zurücksendet:
var net = require('net');
var server = net.createServer(function (socket) {socket.setEncoding("utf8");
socket.send("Hallo\r\n");
socket.on('data', function (data) {socket.send(data);
});
socket.on('end', function () {socket.send("Auf Wiedersehen\r\n");
socket.end();
});
});
server.listen(7000, 'localhost');Projekte
Projekte mit Node.js:* EtherPad Lite[http://pitapoison.de/wie-etherpad-lite-entstand Wie Etherpad Lite entstand]
* PDFKit[http://www.golem.de/1107/84925.html PDFKit: PDF-Dokumente generieren mit Javascript] auf golem.de
* Kod, Editor für Mac OS X[http://www.golem.de/1012/80353.html Kod: Moderner Code-Editor für Mac OS X]
* WebOS von HP[https://developer.palm.com/index.php?id=2109&option=com_content&view=article HP WebOS]
* StackVM,[http://www.golem.de/1008/77151.html StackVM: Virtuelle Maschinen für die Mitbenutzung] auf golem.de darauf aufbauend browserlinghttp://browserling.com/ (Cross-Browser-Testen im Browser)
Auszeichnungen
Im Juli 2011 wurde Node.js auf der Oscon der O'Reilly Open Source Awards verliehen.http://www.heise.de/open/meldung/Oscon-Open-Source-Awards-verliehen-1288676.html Von InfoWorld wurde Node.js im August 2011 mit dem Bossie Awards für beste Open-Source-Software in der Kategorie „Entwicklertools“ ausgezeichnet.http://www.infoworld.com/d/open-source-software/bossie-awards-2011-the-best-open-source-application-development-software-171759-0¤t=9&last=1#slideshowTop
Literatur
* Felix Geisendörfer: [http://t3n.de/magazin/nodejs-javascript-server-revolutioniert-schubrakete-226177/ Wie Node.js JavaScript auf dem Server revolutioniert: Schubrakete für JavaScript], T3N Magazin, 8. Dezember 2010.
Weblinks
- [http://nodejs.org/ Webseite des Projektes node.js]
* [http://npmjs.org/ Webseite der Paketverwaltung npm]
* [http://cre.fm/cre167 Bericht über Node.js] auf Chaosradio Express
* [http://inspirationlabs.com/blog/installing-nodejs-npm-and-mongodb-macosx-lion Installationsanleitung für Node.js und MongoDB unter MacOSX Lion (Englisch)]
Einzelnachweise
be:Node.js
ca:Node.js
cs:Node.js
Node.js
es:Node.js
fa:نود.جی‌اس
Node.js
he:Node.js
it:Node.js
ja:Node.js
ko:Node.js
pt:Node.js
ru:Node.js
uk:Node.js
zh:Node.js
Text und Bilder dieses Beitrags stammen aus dem Artikel Node.js der freien Enzyklopädie Wikipedia und stehen unter der GNU Free Documentation License. Die Liste der Autoren ist in der Wikipedia unter dieser Seite verfügbar, der Original-Artikel lässt sich hier bearbeiten.