Variables globales para proceso
Código Javascript :
GLOBAL.miVariable = "Lo que yo quiera"; console.log(GLOBAL); // Es un JSON
Allí por lo regular coloquen todas las Librerías y cosas que utilizan en todo momento (Yo coloco hasta la coneccion con bases de datos)
Código Javascript :
GLOBAL.os = require('os'); GLOBAL.fs = require('fs'); GLOBAL.url = require('url'); GLOBAL.sys = require('sys'); GLOBAL.http = require('http'); GLOBAL.util = require('util'); // La forma de llamarlo es asi fs.readFile(...); url.parser(...); os.dirTemp();
Muy util!! por que cuando la aplicación pesa mas de 3 MB
El metodo Process
Este es extraño por que nadie lo utiliza ni lo toma enserio. El porque por que nadie sabe como modificar los procesos, desde el motor V8. Pero lo genial es que se puede hacer muchísimo. Un par de ejemplos
Código Javascript :
process.on('exit', function() { console.log('Se murio'); // Cuando se muere el proceso }); process.stderr.on("data", function(data){ console.log('Hubo error'); // Cuando ahy error de proceso }) process.title = "MiProceso"; // Le cambiamos el nombre al proceso process.exit(this) // Matamos el proceso un suicidio
En cual quiera de los métodos, podemos enviar Email o hacer tuits del estado del servidor, así la administración es mas sencilla.
Procesos en Cluster
Nota : Esto es experimental
Los este tipo de procesos es que hace una Fork de los proceso y así todo el PC responde. Si uno de los procesos se muere o no responde se tienen mas procesos para que siga funcionado el servidor. Esto puede ayudar cuando haga ataques DDOS o cuando simplemente estemos en fases BETA. Funciona asi
Código Javascript :
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; // Cantidad de Procesadores if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); // hace fork } cluster.on('exit', function(worker, code, signal) { console.log("Trabajador muerto! " + worker.process.pid + ' died'); }).on("online", function(work){ console.log('Trabajador en linea ' + worker.process.pid ); }); } else { // Esto haran los trabajadores http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); }
Con esto si se les cae la aplicación es por que no hicieron bien la aplicación o todavía existen fallas como en Socket.io. Aqui les dejo otra forma de hacerlo
Código Javascript :
var cp = require('child_process'); // Procesos alternos var n = cp.fork(__dirname + '/sub.js'); // Construimos un proceso alterno y lo ejecutamos n.on('message', function(m) { console.log('PARENT got message:', m); }); n.send({ hello: 'world' });
Ejecutarlo como un comando!
Ojojojo... Eso es un truco aunque no pertenece como tal Nodejs, pero si a NPM. Así se ve mas bonito nuestro software y le diremos a nuestro cliente "es mas practico que usted tenga un comando". Y se así!! Creamos un archivo llamado "package.json" en la raíz del proyecto (Debemos subir ese archivo por que es el mas importarte!)
Código :
{ "name" : "ElNombreDeLaApp", "version" : "0.0.1", "description": "Descripción", "private" : true, "status" : "development", // Esto solo es si esta en desarrollo "author" : "MiNombre", "analyze" : true, "help" : "La ayuda básica", "repository" : { "type" : "git", "url" : "[email protected]:MiNombre/LaApp.git" }, "scripts" : { "prestart" : "./bin/comand prestart", // processo de antes de ejecucion "postinstall": "node bin/post.js" // Proceso POST instalacion }, "bin" : { "MiComando" : "bin/MiComado" }, "engines" : { "node" : ">=0.8.6", "npm" : ">=1.1.59" }, "dependencies" : { "commander" : ">=1.0.0", "masdepedncias" : "*", "maslibrerias": "*" } }
Crearemos una carpeta llamada "bin", allí crearemos un archivo llamado "MiComado", sin extencion. (No se si en Win toca con .bat)
Código :
#!/usr/bin/env node // Y escribimos en javascript
Y para quedar mejor con el cliente, le decimos por favor instale "nodejs" y "git". Y ejecute este comando
Código :
[ sudo ] npm install -g [email protected]:MiNombre/LaApp.git
Taran... taran!! tenemos un comando personalizado desde Nodejs!!
Que tal esos trucos!!! Les gusto??