3

Websockets en la práctica

1Nov
en Desarrollo web, nodeJS, Tutoriales

nodejs

Desde hace un tiempo no escribo en el blog, pero volvemos a la carga con los tutoriales de desarrollo web, y ahora que estamos fresquitos es tiempo de llevar a la práctica el uso de websockets, de los cuales les hablé en un post anterior. Para seguir este tutorial debemos conocer los aspectos básicos de Node.js que podemos leer en el blog RICE de nuestra universidad. Para los de afuera de la universidad pueden seguir los pasos que aquí describo, pero les recomiendo algún buen tutorial de Node.js.

Primero vamos a instalar el Node.js, descargar aquí para Windows y para Linux abrimos la consola y escribimos:

“sudo apt-get install nodejs npm”

Creamos una carpeta llamada tuto y en ella creamos dos ficheros, uno llamado app.js donde escribiremos nuestro código y otro llamado package.json donde especificaremos los paquetes necesarios para que funcione nuestra aplicación, en este caso solo necesitaremos de la librería socket.io.

Antes de descargar los paquetes, los usuarios que están bajo un proxy deben configurar el node.js de la siguiente manera en la consola (suponiendo que está configurado el cntlm en el caso de la UCI):

npm config set strict-ssl false
npm config set registry “https://registry.npmjs.org/”
npm config set proxy <a href="https://localhost:3128">https://localhost:3128</a>

Abrimos el fichero package.json y escribimos lo siguiente:

{

    "name": "Prueba",

    "version": "0.0.1",

    "private": true,

    "scripts": {

        "start": "node app.js"

},

"dependencies": {

    "socket.io":"*"

}

}

 

El próximo paso es ir hacia la carpeta tuto desde la consola usando el comando cd:

cd /ztuff/tuto

Ejecutamos el comando para descargar los paquetes(requiere estar conectado a internet, se descargar alrededor de 11 MB, para los de la UCI al final del tutorial dejo toda la app descargada):

npm install

Ahora podemos escribir nuestro código del servidor en el fichero app.js. Realizaremos una pequeña prueba del uso de websockets. Escribimos lo siguiente:

var io = require('socket.io').listen(80);
//Al conectarse un cliente emite un evento tipo 'new' y espera un evento tipo 'my other event'
io.sockets.on('connection', function (socket) {
        socket.emit('news', { hello: 'world' });
        socket.on('my other event', function (data) {
        console.log(data);
    });
});

Ahora vamos a escribir el cliente, para eso descargamos el siguiente fichero y lo ponemos junto a un nuevo fichero que crearemos, llamado index.html con el siguiente código.

<script src="socket.io.js"></script>
<script>
//Conectarse al servidor
  var socket = io.connect('https://localhost');
  //Espera el evento 'news', imprime en consola cuando llegue los datos y emite el evento 'my other event' hacia el servidor
  socket.on('news', function (data) {
    console.log(data);
    alert(data.hello);
    socket.emit('my other event', { my: 'data' });
  });
</script>

Para ejecutar la aplicación del servidor escribimos en Windows

node app.js

En Linux

node.js app.js

En el ejemplo presentado vemos una comunicación bidireccional entre el servidor y el cliente donde se envían datos en formato json. Para emitir un mensaje se utiliza la función socket.emit(param1, param2) donde el primer parámetro es el nombre del evento y el segundo los datos a enviar. Para esperar un evento se utiliza socket.on(param1, func(data)) donde el primer parámetro es el nombre del evento y el segundo es una función que se ejecuta al ocurrir el evento, esta recibe por parámetros los datos enviados.

En el servidor se puede emitir un evento para todos los clientes conectados, en este caso utilizaríamos la función io.sockets.emit(param1, param2).

Para probar la aplicación abrimos en el navegador la página cliente, y si todo sale bien, debe mostrarnos una alerta con la palabra “word”.

Espero que hayan entendido todo, aquí les dejo el ejemplo completo para que prueben.

3 Comentarios

  1. AndyT dice:

    Es medio off-topic, pero no conozco mucha gente que trabaje con nodejs.
    Hace tiempo estoy tratando de instalar una aplicación que requiere instalar el módulo commander de nodejs y aunque lo tengo desargado local, necesita conexión a registry.npmjs.org. ¿Hay alguna forma de instalarlo sin internet?
    Saludos, y disculpen por el off-topic

    • abs dice:

      Mira, intenta esto, crea una carpeta en donde tienes la aplicación que se llame “node_modules”. AHi dentro copia la carpeta del módulo que necesitas. El problema es que si ese módulo también tiene dependencias, y no están satisfechas, no funciona. Compruea que la carpeta de comander tenga una carpeta llamada tambien “node_modules” con las dependencias que aparecen en su package.json.
      Por este tipo de complicaciones es que se utiliza el npm. Si tienes internet, se puede configurar.

  2. Antes de irme de le UCI deje Node 0.10.2 en php.uci.cu, busquenlo por ahi. saludos.

Dejar un comentario

¿Eres humano? Entonces resuelve esta operación: * Límite de tiempo se agote. Por favor, recargar el CAPTCHA por favor.