Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

346
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!