Archivo de la etiqueta: server

Socket.IO Rooms & NameSpace

Socket.io es una excelente herramienta para lo que conocemos como aplicaciones en tiempo real, si tenemos una gran cantidad de usuario y queremos organizarlos y/o segmentarlo para saber a que grupo de usuarios le enviamos cierta información las características de Room y Namespace.

Los namespace

Son una segmentación de nivel superior, tanto el cliente como el server deben tener definidos estos contextos ya definidos una vez la aplicación esta en ejecución a diferencia de los rooms. Por defecto todas las instancias de socket.io usan un namespace ‘/’ dependera de nosotros queremos usar uno extra.

var server = require('http').Server(app);
var io = require('socket.io')(server);

Sigue leyendo

Como manejar procesos nodejs con PM2

Subir procesos y bajar procesos en un sistema linux puede ser suficiente para poner en ejecución un server nodejs y es cool en algunos casos se siente bien ejecutar kill PID para detener procesos pero luego de un tiempo no es tan cool.

Esto “podria” ser suficiente para subir/ejecutar un server nodejs.


node server.js > stdout.txt 2> stderr.txt &

Pero que tal si con solo ejecutar

pm2 start server.js --name ServidorUno

Bueno PM2 es una alternativa a tener que manejar a mano esto de los servidores nodejs y es una alternativa mas a Node for Ever que es mejor que la primera pero se queda algo corta en comparación con PM2. PM2 nos brinda la opción de poder crear balanceadores de carga a nuestra aplicación sin alterar nuestro código el por si solo realiza todo el trabajo sucio detrás de escenas.

Entre sus Principales características podrían destacarse las siguientes:

-Capacidad de manejar un sin numero de apps. ( Ver el estado de distintas apps )
-Capacidad de monitoreo de memoria y cps de nuestros procesos.
-Manejo de logs. ( Cosas que imprimimos en nuestros procesos son mostrados ahi )
-Balanceo de cargas ya mencionado.
-Iniciar tus aplicaciones una vez el servidores se inicia.
-Capacidad de “watch your code” si tu codigo cambia.

este reiniciara el proceso, bien util a la hora de hacer pases sin tener down time.

Ejemplos de iniciar aplicaciones:

La forma de iniciar las aplicación tambien las registrara en la interface de pm2, por lo que solo se iniciara una sola vez de esta forma, luego seria pm2 start [id]|[name]

#ejemplo simple de como iniciar un proceso.
pm2 start server.js 

#iniciara el servidor con 3 procesos
pm2 start server.js -i 3

#inicia el servidor con el máximo numero de procesos posibles
pm2 start server.js -i max

#darle un nombre al proceso ( Esto es para manejarlo por nombre y olvidar el pid )
pm2 start server.js --name HelloServer

#pasar parámetros al iniciar el servidor
pm2 start server.js --node-args="--param=val -d"

#iniciar aplicación observada ( observa cambios en el file system )
pm2 start server.js --watch

Manejo de una aplicacion


pm2 start server.js --name=server-uno

pm2 restart server-uno

#eliminara server-uno de la interface de pm2
pm2 delete server-uno 

#eliminara a todas las aplicaciones ya registradas
pm2 delete all

Comandos de utilidad

#creara un init-script y se ejecutara cada vez que el servidor inicie.
pm2 startup [ubuntu|centos|systemd]

#mostrara todas las aplicaciones registradas
pm2 list

#recargara una aplicación
pm2 reload api

#mostrara los logs de todas las aplicaciones ya corriendo.
pm2 logs

#mostrara logs de la aplicación
pm2 logs appName
#guardara todos los cambios realizados con pm2 ( inicio de aplicación y demás configuraciones )
pm2 save

pm2 list

pm2_list

pm2 desc

pm2_description

pm2 monit

pm2_monitoring
si este projecto les gusto les recomiendo este para un entorno de desarollo Nodemon super facil de usar.

Repositorio y documentación del Projecto

Worker job usando Nodej.s

En alguno proyectos es necesario tener una tarea ejecutando cada cierto tiempo, la cual estaria haciendo desde un heardbeat hasta una consulta en una base de datos para consumir un web service en fin muchas cosas. En este tutorial estaré mostrando una alternativa al poderoso cron de Linux pero esta vez con nodejs.

El ejemplo consta de 2 archivos un archivo server.js que es nuestro servidor js y otro archivo llamado task.js que es nuestro cron.

Page1__Lucidchart

Una vez inciado el cron el envio de mensajes se realiza de la siguiente manera

 childProcess.send({values:[]}) 

Page2__Lucidchart

Server.js

var http = require('http');
var process = require('child_process');

var app = http.createServer(function(req,res){
	child.send({'key':'value'})

	res.end('hello');
});

console.log('server running');

// se realiza el fork del nuevo proceso
var child = process.fork('task.js');

// dispara el evento message hacia el fork
child.send({'key':'valor'})
console.log('proceso hijo iniciado');

app.listen(3000);

Task.js

var context = [];

(function(context){
    setInterval(function(){
        var value = context.pop()
        console.log('iteraciones ' + value);
    },1000);
})(context);

process.on('message',function(value){
    console.log('mensaje recibido');

    context.push(value);
});

Esta seria otra opcion para el task.
Task2.js

var context = [];

var process = function(){
    var value = context.pop()
    console.log('iteraciones ' + value);
}

process.on('message',function(value){
	console.log('mensaje recibido');
	context.push(value);
});

Mi recomendacion es que para algun proceso ligero/pesado y no quieras tener que incluir algun nuevo modulo de node.js o simplemente quieres manejarlo tu mismo lo intententes de esta manera.

Referencias

Child Process Nodejs

Source 

Sending objects

Fork process

Nota: Si requiren algo mas complejo con respecto a este tema recomiendo usar este modulo modulo.

Sigue leyendo