ws-events-and-middlewares
Esta libreria esta concebida como un wrapper del modulo ws de node. Seguro que muchos de vosotros cuando usásteis la tecnología de websocket por primera vez lo hicísteis a traves de la maravillosa libreria de Socket.io
El problema de esta libreria es la integración con React Native y Socket.io-client (version portable del cliente de Socket.io) ya que Socket.io no ha dado soporte propio para React Native.
Cuando te planteas migrar todo el código hecho en Socket.io a la libreria ws 'nativa' te encuentras con el dilema de la gestión del eventos y la escasa versatilidad que te ofrece tener un único evento 'message' para comunicarte con tus cliente.
Veamos un ejemplo del uso de ws sin la libreria de este repositorio:
Construyendo un servidor websockets con ws
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 3000 })
wss.on('connection', function connection(ws) {
ws.on('message', function (message) {
console.log('Mensaje recibido: %s', message)
})
ws.send('ready')
})
Contruyendo la conexión desde el cliente
const WebSocket = require('ws');
const ws = new WebSocket('ws://www.host.com:3000/path');
ws.on('open', function open() {
ws.send('Hola servidor!')
})
ws.on('message', function incoming(data) {
console.log(data)
})
El problema que se nos presenta aquí en oposición a la libreria de Socket.io es que no tenemos forma de modificar el 'tipo' de mensaje que enviamos y estamos obligados a tomar medidas del tipo:
{
type: 'GET_CONNECTED_USERS',
payload: {
bar: 'foo'
}
}
Por otra parte tampoco tenemos gestión de callbacks y nos vemos obligado a esperar recibir un mensaje de respuesta. Como tampoco tenemos gestión para middleware.
Para solucionar estos problemas podemos implementar la libreria ligera de este repositorio:
Instalando ws-events-and-middlewares
npm install ws-events-and-middlewares --save
o
yarn install ws-events-and-middlewares --save
Construyendo el servidor con eventos
Construyendo el cliente
Construyendo el servidor con eventos y middlewares
TODO list
- Manage all socket clients and set unique identifier for each of them.
- Rooms feature