Tel. 06151 / 39 10 793

Experimente mit Node.js unter Ubuntu 11.4

Node.js hat wohl zur Zeit eine sehr gute Zukunfts-Prognose.
Neu ist es allerdings nicht. Es ist JavaScript für server-seitige Scripts.
Und schon CommonJS, welches 2009 nicht unter dem Namen ServerJS in Entwicklung ging, war darauf ausgelegt JavaScript-Scripts server-seitig auszuführen.

"Es gibt doch schon Perl, PHP...
... und andere Sprachen mit denen sich serverseitig Applikationen entwickeln lassen."
Würde wohl nun der Eine oder Andere einwenden wollen.

Eine ganze Reihe von Argumenten könnte man hier entgegnen.

  • Node.JS setzt auf Googles superschnelle V8-Engine, welche vor Ausführung den Code in Maschinencode übersetzt, wodurch es unglaublich performant ist.
  • Web-Entwickler müssen im Grunde keine neue Sprache erlernen. Denn es ist eben JavaScript, dass die meisten Web-Entwickler ohnehin schon drauf haben.
  • Schon mit ein paar Zeilen Code (Ein HTTP-Server mit 7 Zeilen) lassen sich nützliche Scripts basteln.
  • Theoretisch kann man eine komplette Web-Anwendung (Applikations- und Präsentations-Schicht) einzig in JavaScript entwickeln.

Allerdings muss man natürlich auch über die Nachteile von Node.js sprechen.
Die da z.B. wären:

  • Fehlerausgaben sind recht unkonkret.
  • Fehlerausgaben sind schlecht dokumentiert.
  • Node.js bedarf spezieller Programmier-Paradigmen gegenüber z.B. PHP.

Node.js installieren

Unter Ubuntu (in meinen Tests 11.4) geht das recht einfach per Aptitude.

sudo apt-get install nodejs<ENTER>

Erste Script erstellen

Nun einfach in das User-Verzeichnis navigieren und dort z.B. einen "Scripts"-Ordner erstellen.
Dort legen wir nun eine Datei namens "call_bs.js" an und öffnen sie im Editor unserer Wahl um darin folgenden Code einzugeben.

var fs = require('fs'); // Es wird das Built-In Module "Filestream" eingebunden.

/*
* Eine Datei soll gelesen werden.
* Der Output und das Resultat werden an eine Callback-Funktion gesendet.
*/
fs.readFile('grosse_text_datei.txt', 'utf8', function(err, data) {
if (error) {
throw err;
}

console.log (data); // Ausgabe des Datei-Inhalts.
}
);
console.log ('Ich werde unter Umständen bereits vor der Ausführung der I/O-Operation aufgerufen.');
console.log ('Weiter unten im Text wird erklärt weshalb das so ist.');

Der Code zeigt eine grundlegende Eigenheit bei der Entwicklung mit Node.js, welche da ist, dass I/O-Operationen asynchron verarbeitet werden.
Es wird einer I/O-Operation eine Callback-Funktion zugeteilt welche aufgerufen wird wenn verarbeitet wurde/wird.
Dieses Prinzip sollte vielen JavaScript entwicklern bereits vom AJAX her bekannt sein.

Das Script starten

Auf der Console folgende Anweisung eintippen:

node call_bs.js<ENTER>

Einen Server erstellen
Web-Entwicklung mit Node.js erfordert einen kleinen Paradigmen-Wechsel.
Während zum Beispiel PHP-Entwicklung für einen Interpreter durchgeführt wird welcher von einem HTTP-Server genutzt wird, ist es mit Node.js ganz anders.
Für Node.js entwickeln wir unsere Web-Anwendung, also die Applikations-Schicht bereits als eigenständigen Server.

Es ist dann im Optimalfall eine Applikation, welche exakt ihren Zweck abdeckt.

var sys = require('sys');
var http = require('http');
var port = 8080;

sys.puts('HTTP-Starting server.');

http.createServer (function (request, res) {

// Schreibt den Response-Header mit Content-Type und Status-Code.
res.writeHead(200, {'Content-Type': 'text/plain'});

// Schreibt eine Ausgabe in den Response.
res.write('Ich bin ein Test-Output!');

// Schliesst den Response ab.
res.end();
 
}
).listen(port); // Lauscht auf Port "port".

Auch hier ist die das I/O-Prinzip wieder asynchron.
Das Webserver-Object hat eine Callback-Funktion, welche aufgerufen wird, wenn ein Request auf dem Server-Port eingeht.

In einem derartigen Callback könnte man nun bequem eine Dispatcher-Routine unterbringen welche ihrerseits je nach Art des Requests entsprechende Funktionsaufrufe tätigt.

Node.js Anwendungs-Beispiele mit Drupal

  • Entwickeln eines AJAX-Chat-Servers.
  • Entlasten des Webservers durch auffangen von hoch frequenten AJAX-Requests mit Hilfe von fallspezifischen AJAX-Service-Daemons.
  • Ausliefern von cached Inhalten.

Liebe Grüße
Marc Sven Kleinböhl

Activity 2 for Drupal 7 hat eine NodeJS Integration um Facebook und Twitter like Änderungen sofort in der Timeline sichtbar zu machen.

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
CAPTCHA
Diese Frage hat den Zweck zu testen, ob Sie ein menschlicher Benutzer sind und um automatisierten Spam vorzubeugen.
So finden Sie uns