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

127
Visualizações
WebSocket necesita actualizar el navegador para actualizar la lista

Mi proyecto funciona según lo previsto, excepto que tengo que actualizar el navegador cada vez que mi lista de palabras clave envía algo para mostrar. Supongo que es mi inexperiencia con Expressjs y no crear la ruta correctamente dentro de mi websocket. Cualquier ayuda sería apreciada.

Navegador

 let socket = new WebSocket("ws://localhost:3000"); socket.addEventListener('open', function (event) { console.log('Connected to WS server') socket.send('Hello Server!'); }); socket.addEventListener('message', function (e) { const keywordsList = JSON.parse(e.data); console.log("Received: '" + e.data + "'"); document.getElementById("keywordsList").innerHTML = e.data; }); socket.onclose = function(code, reason) { console.log(code, reason, 'disconnected'); } socket.onerror = error => { console.error('failed to connect', error); };

Servidor

 const ws = require('ws'); const express = require('express'); const keywordsList = require('./app'); const app = express(); const port = 3000; const wsServer = new ws.Server({ noServer: true }); wsServer.on('connection', function connection(socket) { socket.send(JSON.stringify(keywordsList)); socket.on('message', message => console.log(message)); }); // `server` is a vanilla Node.js HTTP server, so use // the same ws upgrade process described here: // https://www.npmjs.com/package/ws#multiple-servers-sharing-a-single-https-server const server = app.listen(3000); server.on('upgrade', (request, socket, head) => { wsServer.handleUpgrade(request, socket, head, socket => { wsServer.emit('connection', socket, request); }); });
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

En respuesta a " Cómo enviar y / o transmitir datos de matriz que se actualizan continuamente a un cliente " como se llegó en el comentario.

Una posible solución usando WebSockets puede ser

  1. Cree una interfaz en el servidor para las actualizaciones de la matriz (si aún no lo ha hecho) que aísle el objeto de la matriz de modificaciones externas arbitrarias y admita una devolución de llamada cuando se realicen las actualizaciones.

  2. Determine la latencia permitida para que se produzcan múltiples actualizaciones sin que se envíen. La latencia debe permitir un tiempo razonable para que se complete el tráfico de red anterior sin sobrecargar el ancho de banda innecesariamente.

  3. Cuando se produce una actualización del arreglo, inicie un temporizador si aún no se está ejecutando durante el período de latencia.

  4. Cuando el temporizador expire JSON.stringify la matriz (para tomar una instantánea), borre el estado de ejecución del temporizador y envíe un mensaje al cliente con el texto JSON.

Un método un poco más complicado para evitar el retraso de todas las operaciones de envío sería enviar inmediatamente actualizaciones individuales a menos que ocurran dentro de un período de protección después de la operación de envío más reciente. Entonces, un temporizador podría impulsar las modificaciones realizadas durante el período de protección al final del período de protección.


Radiodifusión

La API de WebSockets no admite directamente la transmisión de los mismos datos a varios clientes. Consulte Server Broadcast en la documentación de ws para ver un ejemplo de envío de datos a todos los clientes conectados mediante un bucle forEach .


Oyente del lado del cliente

En el detector de mensajes del lado del cliente

 document.getElementById("keywordsList").innerHTML = e.data;

sería mejor como

 document.getElementById("keywordsList").textContent = keywordList;

tanto para presentar palabras clave después de decodificarlas de JSON como para evitar que se las trate como HTML.

about 4 years ago · Juan Pablo Isaza Relatório

0

Así que finalmente descubrí lo que quería lograr. Suena sencillo después de que aprendí lo suficiente y pensé en cómo estructurar el back-end de mi proyecto.

Si tiene dos websockets ejecutándose y uno necesita información del otro, no puede ejecutarlos uno al lado del otro. Debe hacer que uno encapsule al otro y luego llame al websocket DENTRO del otro websocket. Esto puede causar fácilmente problemas en el futuro para otros proyectos, ya que ahora tiene un websocket que no se activará hasta que se ejecute el otro, pero para mi proyecto tiene mucho sentido ya que se ejecuta localmente y necesita que todas las partes funcionen al 100 por ciento en orden. ser efectivo. Me tomó mucho tiempo entender cómo estructurar el código como tal.

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