Hola, tengo un sitio web desde el que puedo enviar un mensaje al servidor node js y allí el mensaje se guarda en una matriz. Cuando se envía un mensaje nuevo al servidor, el mensaje nuevo sobrescribe el mensaje antiguo de la matriz. La matriz debe contener mensajes nuevos y antiguos. La salida de la consola después de enviar el mensaje.
const http = require('http'); const { Socket } = require('socket.io'); const WebSocketServer = require('websocket').server; var steviloSporocil = 0; const sporocila=[]; const server = http.createServer(); console.log('Server is on port 3000') server.listen(3000); const wsServer = new WebSocketServer({ httpServer: server }); wsServer.on('request', function(request) { const connection = request.accept(null, request.origin); connection.on('message', function(message) { sporocila[steviloSporocil]=[message.utf8Data]; steviloSporocil++; for (let i = 0; i < steviloSporocil; i++) { connection.sendUTF(sporocila[i]); console.log('Received Message:', sporocila[i]); } }); connection.on('close', function(reasonCode, description) { console.log('Client has disconnected.'); }); }); <?php ob_start() ?> <?php $titel="Chat"; ?> <div class="chat-main" id="text"></div> <form name='form' method='post' class="form"> <div class="form-group"> <input type="text" class="form-control" id="textbox" name="chat" placeholder="Chat"> <button type="button" class="btn btn-primary" name="gumb" id="gumb" onclick="Poslji()" autocomplete="off">Send</button> </div> </form> <script> function Poslji(){ const ws = new WebSocket('ws://localhost:3000'); ws.onopen = function() { console.log('WebSocket Client Connected'); ws.send(document.getElementById('textbox').value); }; ws.onmessage = function(e) { console.log("Received: '" + e.data + "'"); document.getElementById('text').innerHTML=e.data; }; } </script> <?php $content=ob_get_clean(); require "layout.html.php"; ?>Si entendí todo, aquí cómo resolver su problema: toma todos los mensajes anteriores en el índice especificado y agrega el nuevo al final. Si desea agregarlo en la parte superior, simplemente invierta las dos líneas.
sporocila[steviloSporocil] = [ ...sporocila[steviloSporocil], message.utf8Data ];Está enviando los mensajes de la matriz al cliente por separado mediante un bucle for y una connection.sendUTF(sporocila[i]); y luego mostrando el último mensaje recibido usando document.getElementById('text').innerHTML=e.data; .
¿Le sorprende que su sitio web solo muestre el último elemento de la matriz?
¿Por qué no enviar la matriz completa usando JSON.stringify y luego JSON.parse en el cliente?