Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

344
Vistas
manejar conexiones websocket en múltiples instancias

Necesito entender el concepto de manejar websockets en múltiples instancias para que pueda compartirse entre todas las instancias. Por ejemplo, tengo tres nodos en ejecución que están siendo conectados por el balanceador de carga. Al recibir los datos que deben emitirse en el socket específico. Mi idea inicial era crear un hashmap u objetos json para mantener las conexiones websocket. Pero me doy cuenta de que esto no se puede hacer de esta manera, ya que solo será específico para su instancia particular. Si recibo los datos en cualquiera de las instancias, la mayoría de los datos no se emitirán en esa conexión websocket, ya que no sabe en qué instancia se crea el websocket. ¿Existe una buena manera de manejar las conexiones websocket para que pueda compartirse en todas las instancias? Mi idea era usar la base de datos redis o postgres sql porque se comparten entre todas las instancias.

También probé la solución postgres para almacenar la conexión websocket pero cuando guardo la conexión dice

TypeError: Conversión de estructura circular a JSON

¿Existe alguna buena solución para manejar las conexiones websocket que podrían compartirse entre todas las instancias? Si la base de datos es una buena solución, ¿cómo puedo resolver

TypeError: Conversión de estructura circular a JSON

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Supongo que lo que está buscando son Adapters , y está relativamente bien documentado en la documentación oficial de socket.io ( /v4/adapter/ ).

Al escalar a varios servidores Socket.IO, deberá reemplazar el adaptador en memoria predeterminado por otra implementación, de modo que los eventos se enruten correctamente a todos los clientes.

Tienes varios adaptadores oficiales entre los que puedes elegir:

  • Adaptador redis
  • Adaptador MongoDB
  • adaptador postgres
  • Adaptador de clúster

Aquí hay un ejemplo usando el Adaptador MongoDB :

 npm install @socket.io/mongo-adapter mongodb
 const { Server } = require("socket.io"); const { createAdapter } = require("@socket.io/mongo-adapter"); const { MongoClient } = require("mongodb"); // DATABASE CONNECTION const DB = "mydb"; const COLLECTION = "socket.io-adapter-events"; const mongoClient = new MongoClient("mongodb://localhost:27017/?replicaSet=rs0", { useUnifiedTopology: true, }); const io = new Server(); const main = async () => { await mongoClient.connect(); try { await mongoClient.db(DB).createCollection(COLLECTION, { capped: true, size: 1e6 }); } catch (e) { // collection already exists } const mongoCollection = mongoClient.db(DB).collection(COLLECTION); // HERE COMES THE IMPORTANT PART :) // CREATE MONGO DB ADAPTER AND USE IT io.adapter(createAdapter(mongoCollection)); io.listen(3000); } main();

El adaptador se encargará del resto. Cada paquete que se envía a varios clientes (p. ej io.to("room1").emit() o socket.broadcast.emit() ) será

  • enviado a todos los clientes coincidentes conectados al servidor actual
  • insertado en una colección limitada de MongoDB y recibido por los otros servidores Socket.IO del clúster
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda