$ node
      

Sequential

$ cat hello-world.js
console.log("hello fellas!");

$ node hello-world.js
hello fellas!

$

Sequential

$result = mysql_query("SELECT * FROM table");

/* ... process blocked until query returns ... */

if (!$result) {
	die("no result");
}

while ($row = mysql_fetch_assoc($result)) {
	/* iterate over result */
}

Event-driven Programming

db.query("SELECT * FROM table", callback);

/* non-blocking: program continues immediately, 
callback is executed once query is finished. */

var callback = function (result) {
	for (var i in result) {
	     /* iterate over result */
	}
};

Typical node.js Snippets (Filesystem)

var fs = require('fs');

fs.readFile("/etc/passwd", function (err, data) {
	if (err) throw err;
	console.log(data);
});

Typical node.js Snippets (HTTP)

var http = require("http");

http.get("http://uni-ulm.de", function(res) {
	console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
	console.log("Got error: " + e.message);
});

Simple Socket Example

$ cat socket-example.js 
var net = require("net");
var s = net.createServer();

s.addListener("connection", function (socket) {
	socket.write("hello, stranger!\n");
	socket.end();
});

s.listen(1337);

Simple Example

$ node socket-example.js &

$ telnet localhost 1337
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello, stranger!
Connection closed by foreign host.

$ 
https://www.npmjs.org/
Description
https://www.npmjs.org/

Node Package Manager

$ cd someProject/
$ ls
someProject.js	package.json
$ npm publish
$ npm install someProject
...

package.json

$ cat package.json
{
  "author": "Michael Müller ",
  "homepage": "https://github.com/cmichi/twitterwall",
  "repository": {
    "type": "git",
    "url": "https://github.com/cmichi/twitterwall.git"
  },
  "name": "twitterwall",
  "description": "Display topic-related tweets in realtime.",
  "keywords": ["twitterwall", "twitter"],
  "license": "MIT",
  "version": "0.1.4",
  "dependencies": {
    "express": "3.0.x",
    "socket.io": "0.9.x"
  }
}
Any application that can be written in JavaScript, will eventually be written in JavaScript.
Atwood's Law

Libraries

socket.io, cradle, node_pcap, express, …

Vorteile server-seitiges JavaScript?

source: http://memegenerator.net/instance/45933548

Take-Away

Powered By JavaScript.
Googles V8
JavaScript Ereignisbasierte Programierung mittels Callbacks.
Funktional.
Stärken Netzwerk-Anwendungen.
I/O lastige Tasks.
Schwächen CPU-lastige Tasks.