socket.io 断开连接后不重新连接

use*_*342 5 javascript node.js socket.io

我正在开发一个node.js 应用程序,使用socket.io 在服务器和客户端之间进行通信。如果服务器遇到任何错误,我会向客户端发送一条错误消息,并关闭服务器和客户端的连接。但是,当客户端尝试重新连接时,它无法再连接到服务器。我的代码

服务器.js

io.sockets.on('connection', function(socket) {

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

客户端.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);
}
Run Code Online (Sandbox Code Playgroud)

socket.connected 的状态为 false。我在服务器端也没有收到它。

And*_*ers 5

我认为您的调用不是io.conncet同步的,您检查得socket.connected太早了。如果您想验证重新连接是否成功,请尝试如下:

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

编辑: 正如 @jfriend00 指出的那样,您可能不需要socket.disconnect()首先执行此操作,因为 socket.io 应该自动处理重新连接。

  • socket.io 的主要功能之一是它会为您自动重新连接。我不明白为什么如果配置正确,您需要手动重新连接它。换句话说,正确配置的 socket.io 代码不应在您的答案中包含该代码。建立一次连接,然后让 socket.io 为您处理重新连接。 (2认同)