Etikettarkiv: Node.js

Webbutveckling för framtiden

HTML5Att webbutveckla för framtiden eller åtminstone anamma nya tekniker är något som jag gör ständigt. Här är några av de förbättringar/framsteg jag gör:

  • Från MySQL till Redis
  • Från HTML4 till HTML5
  • Från Apache till Nginx
  • Från sed/awk etc till MapReduce med Hadoop

Sen försöker jag i viss mån även att förbättra följande:

  • Nyttja PHP-frameworks i större omfattning
  • Webb-frameworks (typ Twitter Bootstrap)
  • Från PayPal till DIBS eller motsvarande för betalningslösningar
  • Och även uppgradera gammal kod att fungera med nya PHP-versioner, några saker jag ändrar är bl.a. mysql_* till mysqli_ och php short tags
  • Cufón

Så man slipper uppfinna hjulet allt för många gånger och att kod slutar fungera vid uppgraderingar. Men det finns även ett antal nya tekniker som jag önskar att jag hade mer tid att testa:

Något fundamentalt som jag missat?

Så kommer du igång med Node.js

Först och främst så kanske jag ska skriva lite om vad Node.js är för något. Som du ser av filändelsen så är det ett JavaScript-språk och används på serversidan för att kommunicera med exempelvis en webbklient (webbläsare).

Node.js är eventbaserat, litet och lätt till skillnad mot exempelvis Apache. Dock är det värt att notera att Node.js inte är är skapat för att lösa alla problem utan har uppstått från realtidswebbens behov av snabb, skalbar och minnessnål.

Prestandamässigt så kan Node.js jämföras med Nginx (när enbart webbsidor levereras). Bland användare av Node.js så kan Yammer och Plurk nämnas.

– Installation –

Ladda hem källkoden som tar.gz eller zip från Github: https://github.com/joyent/node eller med kommandot:

$ git clone git://github.com/ry/node.git

Gå sedan in i katalogen som skapats och skriv ./configure och då skall det varna om något saknas, sen är det bara skriva make. Ta en kopp kaffe och vänta några minuter. Bland annat så byggs Googles V8 JavaScript-motor.

Om du som jag använder FreeBSD så kommer din byggprocess att misslyckas på två ställen, först och främst så måste du använda gmake istället för make och sedan så måste du lägga på den patch som återfinnes här.

'build' finished successfully (2m10.790s)
$ ./node -v
v0.5.0-pre

För att lättare komma åt node-binären samt dess verktyg så glöm inte att skriva gmake install (eller make install).

– Hello world med Node.JS –

Nu är det dags att skriva vårt första script samt se till att Node hanterar detta program korrekt. Scriptet helloworld.js ser ut enligt följande:

var sys = require("sys");
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80);

console.log('Server running at port 80');

Sedan för att se till att node exekverar och levererar ovan på TCP port 80 så skriver vi enligt följande:

$ sudo node helloworld.js
Server running at port 80

Observera att du måste köra detta med root-behörighet eftersom vi lyssnar på port 80. Många väljer att använda port 8080 eller liknande men det är inget jag rekommenderar eftersom många brandväggar ej släpper igenom denna port. Läs denna guide hur du undviker att köra som root men ändå kan använda port 80. Att köra program som root är något som du vill undvika i största mån då detta kan innebära en säkerhetsrisk.

Koden ovan är tämligen självförklarande. Om du vill använda Nginx + PHP på samma server så kan du binda till olika IP-nummer genom att ändra .listen(80); till .listen(80, ”1.2.3.4″); eller det IP-nummer du vill binda till. Du måste även binda Nginx till det andra IP-nummret.

Node.JS i bakgrunden

Om du vill ha möjligheten att lägga program i bakgrunden vilket är troligt i en skarp miljö så måste du göra enligt följande förfarande då det saknas en modul vid namn daemon.node.

  1. Ladda hem koden från https://github.com/Slashed/daemon.node
  2. Kompilera med hjälp av verktyget node-waf (följer med Node.JS) på följande sätt: node-waf configure build
  3. Lägg den binär med sökväg build/default/daemon.node i samma mapp som helloworld.js
  4. Byt ut koden mot nedan där två rader är tillagda:
var sys = require("sys");
var daemon = require("./daemon");
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80);

console.log('Server running at port 80');
daemon.start();

Startar du helloworld.js nu så läggs tjänsten i bakgrunden.

Trevligt! Hör av dig om du har några frågor. Nästa gång så går jag in på hur du kan kommunicera lätt mellan Redis och webbläsaren med hjälp av Node.JS