socket.io 重新连接后又创建一个连接

问题描述 投票:0回答:2

我正在尝试使用socket.io 和node.js here创建一个简单的聊天应用程序。每次我重新启动 Node.js 服务器时,socket.io 都会自动重新连接,并以某种方式再创建一个与服务器的连接,即客户端现在收到相同的聊天消息两次。我该如何解决这个问题?

node.js socket.io
2个回答
21
投票

默认情况下,断开连接时,socket.io 会重新连接丢失的连接,从而重新运行

connect
事件。因此,每次重新连接时,您都会添加一个事件侦听器来接收消息。因此,您会收到多条消息,数量等于服务器重新启动/连接丢失。

Incoming Chat: 
Connected
dsdadsada
Disconnected                         //recieved by 1st listener
Connected                            //added 2nd listener
adasd
Disconnected                         //recieved by 1st listener
Disconnected                         //recieved by 2nd listener
Connected                            //added 3rd listener

您应该使用

once
而不是
on
来监听第一个连接,后者仅在第一次运行事件处理程序。尝试一下

iosocket.once('connect', function () {

而不是

iosocket.on('connect', function () {

6
投票

尝试以这种方式编写index.html

 iosocket.on('connect', function () {
      $('#incomingChatMessages').append($('<li>Connected</li>'));
 });
 
 iosocket.on('message', function(message) {
      $('#incomingChatMessages').append($('<li></li>').text(message));
 });

 iosocket.on('disconnect', function() {
      $('#incomingChatMessages').append('<li>Disconnected</li>');
 });

可能是因为另外2个事件监听器注册了connect事件造成的。 当客户端断开连接时,其他 2 个侦听器仍会在这里并且不会取消注册。

关于重复活动注册

的官方文档
© www.soinside.com 2019 - 2024. All rights reserved.