{"id":171,"date":"2010-08-10T20:06:43","date_gmt":"2010-08-10T20:06:43","guid":{"rendered":"http:\/\/realnorth.net\/blog\/?p=171"},"modified":"2013-07-06T01:18:16","modified_gmt":"2013-07-06T04:18:16","slug":"nodejs-101","status":"publish","type":"post","link":"https:\/\/realnorth.net\/blog\/nodejs-101\/","title":{"rendered":"node.js 101"},"content":{"rendered":"<p><a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a> es el en\u00e9simo intento de llevar JavaScript del lado del servidor, pero al parecer esta vez a base de mucho hype y una arquitectura bien dise\u00f1ada, la idea esta traccionando y haciendo que el numero de seguidores crezca d\u00eda a d\u00eda.<\/p>\n<p>Como dije antes esta idea no es nueva, ya desde 1996 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Netscape\" target=\"_blank\">Netscape<\/a> trataba de meter JavaScript en el server side con su producto <a href=\"http:\/\/philip.greenspun.com\/wtr\/livewire.html\" target=\"_blank\">LiveWire<\/a>, el tiempo paso y muchos proyectos intentaron en vano captar la atenci\u00f3n, luego llego <a href=\"http:\/\/www.commonjs.org\" target=\"_blank\">CommonJS<\/a>, la cual es una especificaci\u00f3n que trata de crear un API est\u00e1ndar para el manejo de las funcionas mas comunes y necesarias para poder correr JavaScript fuera del \u00e1mbito del browser, <a href=\"http:\/\/www.commonjs.org\" target=\"_blank\">CommonJS<\/a> puso nuevamente en el radar la idea de usar JavaScript en el server side y empezaron a florecer gran cantidad de <a href=\"http:\/\/www.commonjs.org\/impl\/\" target=\"_blank\">implementaciones compatibles<\/a> con ella, una de estas es <a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a>.<\/p>\n<p><a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a> como reza su lema <strong>&#8220;Evented I\/O for V8 JavaScript&#8221;<\/strong> se apoya en un arquitectura <a href=\"http:\/\/en.wikipedia.org\/wiki\/Event-driven_architecture\" target=\"_blank\">orientada a eventos<\/a> y en el <a href=\"http:\/\/en.wikipedia.org\/wiki\/V8_%28JavaScript_engine%29\" target=\"_blank\">motor V8<\/a>, para lograr una alta escalabilidad y una gran velocidad de ejecuci\u00f3n, <a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a> abandona el modelo tradicional usado por los servidores web en los cuales por cada request se crea un thread\/process y pasa a un modelo de event loop en donde se puede acceder a todo usando eventos y callbacks, esta idea tampoco es nueva, en Ruby tenemos a <a href=\"http:\/\/rubyeventmachine.com\/\" target=\"_blank\">EventMachine<\/a> y en Python a <a href=\"http:\/\/twistedmatrix.com\/trac\/\" target=\"_blank\">Twisted<\/a> haciendo algo parecido desde hace un tiempo y de los cuales <a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a> a tomado debida nota para tomar lo mejor de ellos, en <a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a> todas las operaciones de I\/O se ejecutan asincronicamente, lo que permite al servidor seguir aceptando requests mientras las operaciones de I\/O se completan, lo cual posibilita crear aplicaciones r\u00e1pidas y escalables muy f\u00e1cilmente.<\/p>\n<p><a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a> corre sobre cualquier OS *nix, su instalaci\u00f3n es muy sencilla y tanto en el sitio oficial como en el <a href=\"http:\/\/github.com\/ry\/node\" target=\"_blank\">repositorio<\/a> de github donde se aloja el proyecto hay informaci\u00f3n al respecto.<\/p>\n<p>Antes de terminar pasemos al &#8220;hello world&#8221; de rigor.<\/p>\n<pre>\r\nvar http = require('http');\r\nhttp.createServer(function (req, res) {\r\n  res.writeHead(200, {'Content-Type': 'text\/plain'});\r\n  res.end('Hello Worldn');\r\n}).listen(3003);\r\n<\/pre>\n<p>En la primera linea se carga el modulo http, luego creamos el server http el cual queda a la espera de las requests en el port 3000, cuando una request llega, este responde enviando las http headers, un status code 200 y el mensaje &#8220;Hello World&#8221;, para luego finalizar la conexi\u00f3n.<\/p>\n<p><img decoding=\"async\" title=\"node.js - Hello World\" src=\"http:\/\/realnorth.net\/blog\/wp-content\/uploads\/2010\/08\/paulo@kendra-_002.png\" alt=\"node.js - Hello World\" \/><\/p>\n<p>Para finalizar les dejo el v\u00eddeo de la presentaci\u00f3n que dio <a href=\"http:\/\/tinyclouds.org\/\" target=\"_blank\">Ryan Dahl<\/a> (su creador) hace unos meses en las oficinas de Google, la cual es un buen punto de partida para interiorizarse mas en la arquitectura y filosof\u00eda de <a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a>.<\/p>\n<div class=\"video-container\">\n<iframe src=\"\/\/www.youtube-nocookie.com\/embed\/F6k8lTrAE2g?rel=0\" frameborder=\"0\" allowfullscreen><\/iframe>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>node.js es el en\u00e9simo intento de llevar JavaScript del lado del servidor, pero al parecer esta vez a base de mucho hype y una arquitectura bien dise\u00f1ada, la idea esta traccionando y haciendo que el numero de seguidores crezca d\u00eda a d\u00eda. Como dije antes esta idea no es nueva, ya desde 1996 Netscape trataba [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[33,41,48],"class_list":["post-171","post","type-post","status-publish","format-standard","hentry","category-development","tag-node-js","tag-performance","tag-scalability"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts\/171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/comments?post=171"}],"version-history":[{"count":2,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts\/171\/revisions"}],"predecessor-version":[{"id":2296,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts\/171\/revisions\/2296"}],"wp:attachment":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/media?parent=171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/categories?post=171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/tags?post=171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}