Þessi síða notar kökur (e. cookies) til að auðvelda þér að vafra um vefinn.

Node.js + Windows Azure

Það er búið að vera mjög gaman að fylgjast með þeirri miklu gróska í þróun forritunarmála sem hefur átt sér stað síðustu árin. Áður fyrr var algengt að fyrirtæki notuðu eitt aðalmál en aðstæður hafa breyst hratt. Sprota fyrirtæki velja ekkert endilega C++, C# eða Java sem þeirra fyrstu mál en velja jafnvel nokkur mál. Það má næstum fullyrða að flest fyrirtæki sem smíða veflausnir noti JavaScript að einhverju eða miklu leiti. Það ætti því að koma skemmtilega á óvart fyrir marga að Node.js keyrsluumhverfið notar JavaScript á biðlara.

Hvað er nú þetta Node.js?

Node.js er byggt á V8 keyrsluvélinni frá Google, sem er sú sama og er notuð í Chrome .JavaScript til að auðvelda að búa til skalanlega vefi eða aðrar netþjónustur. Node.js er hannað svipað og Python Twisted eða Event Machine í Ruby en gengur talsvert lengra heldur en þessi mál gera. Hérna er dæmi um einfalt TCP forrit í Node.js, sem svarar öllum fyrirspurnum með textanum  “Hallo heimur”:

//Http
var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hallo heimur\n');
}).listen(1337, '127.0.0.1');

//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');

Node.js og gagnagrunnar

Þegar kemur að því að tengjast við gagnagrunn eru margir möguleikar í boð, bæði SQL Server og MongoDB eru áhugaverðir í sínum flokki. SQL Server styður TDS protocol (Tabular Data Stream Protocol Specification) sem pakkinn node-tds nýtir til að tala beint við SQL Server 2005 eða nýrri. Allar aðgerðir í node.js eru skrifaðar Async sem þýðir að við skilgreinum hvað við ætlum að gera við gögnin þegar þau berast, en þurfum ekki að bíða á meðan verið er að sækja gögnin í „stmt.execute()“ línunni:

var tds = require('tds');
 
var conn = new tds.Connection({
  host: 'localhost',
  port: 1433,
  userName: 'user',
  password: 'password'
});
var stmt = conn.createStatement('SELECT 1');

stmt.on('row', function(row) {
  console.log('Received row: ', row.getValue(0));
});
stmt.execute();
    
Node.js kemur með NPM (Node Package Manager) sem er notað til að sækja þau forritunarsöfn sem nauðsynleg eru. Hægt er að fara inn á slóðina http://search.npmjs.org til að finna forritunarsöfn í boði.

Hýsingar möguleikar

Hýsingar möguleika fyrir Node.js hefur verið bætt við í Windows Azure, en .NET var eina leiðin í upphafi til að forrita fyrir Windows Azure. Í dag er einnig komin stuðningur fyrir node.js, java, php, c++ og python. Það kæmi mér ekkert á óvart ef stuðningur við Erlang og Scala kæmi núna í framhaldi. En hvað varðar Windows Azure þá eru tveir mjög spennandi möguleikar í boði. Annar er sá að sækja Window Azure SDK fyrir Node.js og síðan í framhaldi búa til skelina fyrir lausnina í gegnum PowerShell fyrir Node.js sem kemur sem partur af Windows Azure SDK fyrir Node.js. Hin leiðin er sú að nota vefinn http://c9.io, sem er node.js ritill þar sem þú getur smíðað node.js lausn, aflúsað og síðan sent á Windows Azure með mjög þæginlegum hætti.

Það eru nokkur atriði sem er gott að vita af. Ef þú ert að smíða node.js lausn sem notar mikið þá möguleika sem Windows Azure býður uppá eins og Blog Service, Service Bus Queues, Service Bus Topics, Queue Service eða Table Service þá er mikið hentugra að smíða vefinn á vél sem þú hefur fullan aðgang að og er með keyrandi Windows Azure Emulator. Það tekur nefnilega tíma að senda node.js forritið í Windows Azure og að sjá niðurstöðu.

Núna þegar við erum komin með node.js forritið okkar í Windows Azure hýsingu þá er mjög þæginlegt að nota Table Service í staðinn fyrir SQL Server, MongoDB eða sambærilega grunna. Table Service hefur mjög þæginlegan apa fyrir node.js sem gerir okkur kleyft að búa til töflu ef hún er ekki til fyrir.

var uuid = require('node-uuid');
var azure = require('azure');

var client = azure.createTableService();

client.createTableIfNotExists('employee', function(error) {
    if(error) throw error;
});

var item = {
    name: 'Guðmundur Jón Halldórsson',
    JobRole: 'Programmer',
    dob: '1971-08-02',
    RowKey: uuid(),
    PartitionKey: 'companyName'
};
client.insertEntity('tasks', item, function(){});

Hvað þarf til að búa til node.js forrit?

Góð leið til að koma sér af stað er að velja forritunar söfn sem leysa fyrir þig algeng vandamál sem þarf að leysa í öllum vefjum:
•    Express - http://expressjs.com/ - Routing og Views
•    Socket.io - http://socket.io/ - Rauntíma samskipti milli vefskoðara
•    Log.io - http://logio.org/ - Fylgjast með í rauntíma hvernig forritið vinnur
•    Stylus - http://learnboost.github.com/stylus/ - Einfaldara CSS
•    Jade - http://jade-lang.com/ - html sniðmáts vél

Leiðbeiningar um hvernig á að koma sér af stað með Node.js og Windows Azure er að finna á þessari slóð http://www.gudmundurjon.net/web/javascript/getting-started-with-azure-and-node-js. Þar koma einnig fram listi yfir PowerShell Cmdlets fyrir node.js og Windows Azure sem hjálpa mjög mikið til að búa til grunninn af lausnunum hvort sem það er WebRole, WorkerRole eða grunn mappa verkefnisins og allar skrár. Einnig eru mjög ítarlegar upplýsingar að finna á slóðinni http://www.windowsazure.com.

Hvað kostar að hýsa vef á Windows Azure?

Allar upplýsingar um kostnað er að finna á slóðinni http://www.windowsazure.com/en-us/pricing/calculator/advanced/. Það sem þarf að hafa í huga er að það þarf að borga sérstaklega fyrir öll gögn sem fara frá gagnaverinu, sem í flestum tilfellum skiptir mjög litlu eða engu máli. Nema ef þú værir með myndbanda þjónustu þar sem allir notendur væru að streyma efni í HD gæðu, það gæri orðið talsvert dýrt.

Höfundur: Guðmundur Jón Halldórsson

Heimildir af vef

Node.js. 2012. Forsíða. Sótt 20. Apríl 2012 af http://nodejs.org
Node-TDS. 2012. Github. Sótt 20. Apríl 2012 af http://cretz.github.com/node-tds/
WindowsAzure. 2012. Node.js. Sótt 20. Apríl 2012 af http://www.windowsazure.com

Lesið 3638 sinnum Síðast breytt fimmudagur, 10 Maí 2012 15:46