socket.io断开连接后无法重新连接

5
我正在开发一个使用socket.io在服务器和客户端之间通信的node.js应用程序。如果服务器出现任何错误,我会向客户端发送错误消息,并关闭服务器和客户端的连接。但是当客户端尝试重新连接时,它无法再连接到服务器。以下是我的代码:
server.js
io.sockets.on('connection', function(socket) {

   /*Some code*/
   stream.on('error',function(errormsg){
        socket.emit('error',{txt: "Error!"});
        socket.disconnect();
   });
});

client.js

var server_name = "http://127.0.0.1:5000/";
var socket = io.connect(server_name);

socket.on('error',function(data){
   console.log(data.txt);
   socket.disconnect();
});

function submitclick()
{
  var text="hello";
  if(socket.connected ==false)
    socket= io.connect({'forceNew': true});
  console.log(socket.connected);
}

socket.connected的状态为false。服务器端也没有收到相关信息。

1个回答

5

我认为你对 io.connect 的调用并不是同步的,你检查 socket.connected 的时机太早了。如果你想要验证重新连接是否成功,请尝试按照以下方式执行:

function submitclick()
{
  var text="hello";
  if(socket.connected ==false) {
    socket= io.connect({'forceNew': true});
    socket.on('connect', function() {
      console.log('Connected!');
    });
  }
}

编辑:正如@jfriend00所指出的那样,你可能没有必要首先执行socket.disconnect(),因为socket.io应该自动处理重新连接。


2
socket.io 的主要特点之一是它会为你自动重新连接。如果配置正确,我不明白为什么需要手动重新连接它。换句话说,正确配置的 socket.io 代码不应该包括你回答中的代码。建立连接后,让 socket.io 为您处理重新连接。 - jfriend00
@jfriend00 好建议。 - Andrew Lavers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接