Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

263
Visualizações
socket.io socket.connected siempre devolviendo falso

Tengo este problema con la conexión socket.io. Necesito obtener el atributo socket.connected que está dentro de la instancia de socket.io. Si consuelo. registro el objeto, muestra el "conectado" como verdadero, pero cuando uso la variable, siempre devuelve falso. Aquí está el código:

Mi objeto socketConnection con patrón singleton

 const socketConnection = { _instance: null, _isConnected: false, _interval: null, get getInstance() { if (!this._instance) { this._instance = io.connect(`/${sms.link}`, { reconnection: false }); this._instance.on("connect", () => { this._isConnected = true; }); this._instance.on("disconnect", () => { this._isConnected = false; this._interval = window.setInterval(() => { if (this._isConnected) { clearInterval(this._interval); this._interval = null; return; } socketConnection.getInstance; }, 5000); }); } return this._instance; } };

La función a la que llamo el objeto socketConnection

 function openSocketCommunication() { const socket = socketConnection.getInstance; if(socket && socket.connected) { notification.show("{% trans 'Chat connection established' %}", "success"); socket.on("incomingMessage", (message) => { createMessage(message); removeTypingEffect(); goToBottom(); }); socket.on("incomingTyping", () => { if (!typingDots) { createTypingDots(); } if (!typing) { typing = true; addTypingEffect(); } clearTimeout(typingTimeout); typingTimeout = setTimeout(clearTyping, 2000); }); } else { notification.show("{% trans 'Coudn\'t establish chat connection. Try to reload the page' %}", "error"); typingForm.style.display = 'none'; } }

Lo extraño es que si configuro un tiempo de espera de 1 segundo, puedo ver el valor correcto

 setTimeout(() => { console.log(socket.connected,socket.id) }, 1000);

Traté de empaquetar dentro de una estrategia asíncrona/esperar y prometer/resolver pero aún así no funcionó. ¿Alguna idea?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El problema es que socket.io no se ha conectado al servidor la primera vez que ejecuta if(socket && socket.connected) . Por lo tanto, debe agregar un oyente en 'conectar' dentro de openSocketCommunication , que reaccionará cuando realmente tenga la conexión en funcionamiento.

Algo como esto:

 function openSocketCommunication() { const socket = socketConnection.getInstance; if(socket) { socket.on("connect", () => { // Run all code that should run each time you get a reconnect notification.show("{% trans 'Chat connection established' %}", "success"); // You might need a flag to avoid adding multiple listeners for incomingMessage socket.on("incomingMessage", (message) => { createMessage(message); removeTypingEffect(); goToBottom(); }); // You might need a flag to avoid adding multiple listeners for incomingTyping socket.on("incomingTyping", () => { if (!typingDots) { createTypingDots(); } if (!typing) { typing = true; addTypingEffect(); } clearTimeout(typingTimeout); typingTimeout = setTimeout(clearTyping, 2000); }); }); } else { notification.show("{% trans 'Coudn\'t establish chat connection. Try to reload the page' %}", "error"); typingForm.style.display = 'none'; } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda