【问题标题】:Socket.io Chat ServerSocket.io 聊天服务器
【发布时间】: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 =&gt; { 处理程序之外
  • 是的,它现在似乎可以工作了。非常感谢......

标签: javascript node.js socket.io


【解决方案1】:

您正在为每个点击事件创建 socket 监听器,这就是显示计数增加的原因。

【讨论】:

    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多