Servicio de chat con Node.js y despliegue en Heroku

Conexiones al servidor

Para que manejar conversaciones en tiempo real entre un servidor y sus clientes a través de la red necesitamos utilizar sockets.

Manejar sockets suele ser una tarea bastante tediosa, pero por suerte para nosotros hay una tecnología llamada web sockets que nos facilitará mucho la vida. Para utilizarla en JavaScript podemos hacr uso de la biblioteca Socket.IO.

Tendremos que implementarla en ambos lados de nuestra aplicación, vamos a empezar por el servidor:

npm install -s socket.io

Para utilizar el módulo en el servidor tendremos que iniciar un servicio http paralelo en nuestra app y cargarlo en la biblioteca justo después de crear nuestra app:

server.js

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

Para capturar las conexiones al servidor definiremos un evento connection que recuperará el socket abierto entre el servidor y el cliente:

io.on('connection', (socket) => {
  console.log('Usuario conectado', socket)
})

Y ahora muy importante, en lugar de poner en marcha el servidor Express directamente, usaremos el que hemos redefinido en http que es donde tenemos socket.io funcionando:

var server = http.listen(3000, () => {

Con esto ya estamos escuchando los web sockets, pero no podemos probarlos hasta programar alguna prueba en el cliente web.

Así que vamos a cargar la biblioteca socket.io en el frontend que se añade automáticamente como recurso del servidor:

public/index.html

<!-- Cargamos la biblioteca de sockets que se añade automáticamente --> 
<script src="/socket.io/socket.io.js"></script> 

Con la biblioteca cargada el primer paso es conectar el cliente al server:

var socket = io()

Si cargamos de nuevo la página HTML veremos como ya nos aparece en el servidor el mensaje de Usuario conectado.