Encontré muchos ejemplos que muestran cómo crear un servidor websocket (nodejs).
Ejemplo de ilustración (por mi parte, estoy usando expressJS):
var http = require('http'); /** QUESTION 2 (optional) */ var WebSocketServer = require('websocket').server; var httpServer = http.createServer((request, response) => { ... }); httpServer.listen(8080, () => { ... }); wsServer = new WebSocketServer({ httpServer: server, /** QUESTION 1 */ ... });PREGUNTA 1 : ¿Por qué WebSocketServer necesita la instancia de httpServer? Me imaginé creando un servidor WS especificando solo un host y un puerto, no una instancia HTTP.
PREGUNTA 2 : ¿Puedo usar ExpressJS?
Finalmente lo tengo !
Entonces HTTP y WebSockets son ambos protocolos. WebSockets utiliza el protocolo HTTP para funcionar. Entonces, respondiendo mi propia PREGUNTA 1: WebSockets aumenta el protocolo HTTP al saber cómo comunicarse con el protocolo websocket. Es por eso que se necesita un servidor HTTP.
Para la pregunta 2, es un poco más sutil. Puede usar dos instancias HTTP diferentes (una para una API HTTP normal y otra para los WebSockets). Entonces trae la pregunta de: ¿Por qué necesita ambos? Y la respuesta es bastante lógica. Bueno, si ya tiene una instancia HTTP (http.createServer o Express appServer), entonces puede reutilizar la misma instancia HTTP para evitar ser codicioso con los recursos de su servidor.
Básicamente, usar la misma instancia HTTP en Express y con websocket.io (como ilustración). Tu harías
const express = require('express'); const app = express(); const http = require('http'); const server = http.createServer(app); const { Server } = require("socket.io"); /** socket.io is using the single 'server' instance (bound to it) */ const io = new Server(server); /** Add a route to express that is bound to the single HTTP server instance */ app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); /** Add a websocket path that is bound to the single HTTP server instance */ io.on('connection', (socket) => { console.log('a user connected'); }); /** Express is using the single 'server' instance (bound to it). */ server.listen(3000, () => { console.log('listening on *:3000'); });Fuente: https://socket.io/fr/get-started/chat
¡En ese ejemplo, podemos ver que expressJS y websocket.io están usando la misma instancia HTTP! \o/