History: Chat con socket.io

Revision made 7 years ago by Francisco Presencia. Go to the last revision.

En esta lección aprenderéis cómo hacer un chat en tiempo real con Node.js, y socket.io. Aprenderemos qué es eso de websockets y para qué es útil.

Instalación

Primero que nada seguir la guia de instalación de Introducción y Preparación. Después, una vez estemos en nuestra carpeta del proyecto y hayamos hecho npm init, instalaremos la librería server, que nos servirá para crear nuestro back-end:

npm install server --save

Back-end

Para el back-end vamos a usar las funciones que provee server, que ya incluye la librería socket.io. Como el back-end va a ser sencillo vamos a hacerlo en sólo 1 o 2 archivos. Si fuera más complejo habría que dividir el código de acuerdo a la complejidad del mismo. Primero creamos nuestro punto de entrada, index.js:

// index.js
const server = require('server');
const { get, socket } = server.router;
const chat = require('./chat');

server([
  get('/', ctx => ctx.res.render('index')),
  socket('login', chat.login),
  socket('message', chat.message),
  socket('logout', chat.logout),
  socket('disconnect', chat.logout),
]);

Y después creamos la lógica del chat.js:

// Cuando un usuario entra su nombre de usuario se registra este en el back-end
exports.login = ctx => {
  ctx.socket.name = ctx.data;
  return ctx.io.emit('login', { name: ctx.data.name, time: new Date() });
};

// Cuando alguien envía un mensaje, reenviarlo a todo el mundo
exports.message = ctx => {
  ctx.io.emit('message', { text: ctx.data, time: new Date() });
};

// Cuando alguien hace logout mostrarselo también a todo el mundo
exports.logout = ctx => {
  return ctx.io.emit('logout', { name: ctx.data.name, time: new Date() });
};