嗨,我有一個來自女巫的網站,我可以向節點 js 服務器發送訊息,并且訊息保存在 aa 陣列中。當新訊息發送到服務器時,陣列中的舊訊息將被新訊息覆寫。陣列必須包含新舊訊息。 發送訊息后控制臺的輸出
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";
?>
uj5u.com熱心網友回復:
如果我明白了一切,這里如何解決您的問題:您在指定索引處獲取所有先前的訊息并在末尾添加新訊息。如果要將其添加到頂部,則只需反轉兩行即可。
sporocila[steviloSporocil] = [
...sporocila[steviloSporocil],
message.utf8Data
];
uj5u.com熱心網友回復:
將新專案添加到 Javascript 陣列的方法是使用push方法。
試試下面的:
connection.on('message', function(message) {
sporocila.push(message.utf8Data);
steviloSporocil ;
for (let i = 0; i < steviloSporocil; i ) {
connection.sendUTF(sporocila[i]);
console.log('Received Message:', sporocila[i]);
}
});
編輯:另外,您不需要跟蹤steviloSporocil,您可以通過使用陣列上的 來獲取陣列長度.length,如下所示:
connection.on('message', function(message) {
sporocila.push(message.utf8Data);
for (let i = 0; i < sporocila.length; i ) {
connection.sendUTF(sporocila[i]);
console.log('Received Message:', sporocila[i]);
}
});
uj5u.com熱心網友回復:
您正在使用 for 回圈將陣列中的訊息分別發送到客戶端connection.sendUTF(sporocila[i]);,然后使用document.getElementById('text').innerHTML=e.data;.
您是否對您的網站僅顯示陣列中的最后一項感到驚訝?
JSON.stringify為什么不使用然后JSON.parse在客戶端發送整個陣列?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479509.html
標籤:javascript 节点.js
下一篇:如何在切換下拉選單上添加互斥性
