Node.js + Socket.IO - Socket无法重新连接?

6
我知道socket.io有一个内置的重新连接功能,但是我认为它并没有起作用-从其他人那里的经验来看,它对他们也没有起作用。
如果用户将计算机休眠,它会使其断开连接,然后当他们再次打开计算机时,他们将不再连接,因此他们在刷新页面之前不能收到任何通知或其他内容。也许只是我做错了什么?
var io = require('socket.io').listen(8080);
var users = {};

////////////////USER CONNECTED/////

console.log("Sever is now running");

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

    //Tell the client that they are connected
    socket.emit('connected');

    //Once the users session is recieved
    socket.on('session', function (session) {

        //Add users to users variable
        users[socket.id] = {userID:session, socketID:socket};

        //When user disconnects
        socket.on('disconnect', function () { 

        //socket.socket.connect();

             var count= 0;
            for(var key in users){
                if(users[key].userID==session)++count;
                if(count== 2) break;
            }
            if(count== 1){
               socket.broadcast.emit('disconnect', { data : session});
            }

            //Remove users session id from users variable
            delete users[socket.id];
        }); 


        socket.on('error', function (err) {
            //socket.socket.connect();
        });

socket.emit("connection")需要在用户重新连接时调用,或者至少需要调用该事件中发生的事件。

另外,socket.socket.connect();不起作用,它会返回一个错误,并且会以“connect不存在”的错误关闭套接字服务器。

1个回答

4

这个问题与io.connect参数有关。

看看这段客户端代码(它将尝试永远重新连接,每次尝试之间的最大延迟为3秒):

 ioParams = {'reconnection limit': 3000, 'max reconnection attempts': Number.MAX_VALUE, 'connect timeout':7000}
 socketAddress = null
 socket = io.connect(socketAddress, ioParams)

与您的问题相关的有两个重要参数:

  • 重新连接限制 - 限制重新连接尝试之间的最长延迟时间。通常在服务器停机时间越长时,它会变得越来越大。
  • 最大重新连接尝试次数 - 您想尝试的次数有多少。默认值为10。在大多数情况下,这是客户端停止尝试的原因。

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