【发布时间】:2019-11-27 13:03:13
【问题描述】:
我使用 javascript 和 nodejs 创建了一个聊天服务器。一切似乎都正常,但是当我发送消息时,第一条消息显示一次,第二条消息显示两次,依此类推。
我在 Linux 上尝试过,然后在 Windows 机器上甚至在我的 iPad 上尝试过。它显示了相同的结果。我也在客户端输入了计数器,结果是(对于每条消息): 消息 1:1 消息 2:2 1 消息 3:3 2 1 消息 4:4 3 2 1
客户
send.addEventListener('click', event => {
event.preventDefault();
const msg = document.querySelector('#msg').value;
document.querySelector('#msg').innerHTML = "";
let packet = {
username: userProfile.username,
message: msg
};
let i = 0;
socket.emit('chat', packet);
socket.on('chat', (data) => {
i=i+1;
console.log(i);
chatBox.innerHTML += `<p><strong>${data.username}:</strong> ${data. message}</p>`;
});
});
});
服务器
let stat = search(profile);
if(stat.status === "failure")
{
user.push(profile);
io.sockets.emit('login', {status: "failure"});
}
else
{
io.sockets.emit('login', {status: "success"});
}
});
let i = 0;
socket.on('chat', data =>
{
i++;
io.sockets.emit('chat', data);
console.log(i);
});
});
我希望消息会显示在聊天框上。它显示消息,但每条消息显示两次或三次。
【问题讨论】:
-
每次处理点击时,都会添加另一个
socket.on('chat',侦听器 - 将socket.on('chat', (data)代码放在send.addEventListener('click', event => {处理程序之外 -
是的,它现在似乎可以工作了。非常感谢......
标签: javascript node.js socket.io