在断开事件

时间:2015-12-03 15:04:25

标签: node.js sockets websocket socket.io

我试图在使用相同的socket触发disconnect事件后重新连接套接字。这里是我的套接字配置

var http = require('http').Server(app);
var io = require('socket.io')(http);
var connect_clients = [] //here would be the list of socket.id of connected users
http.listen(3000, function () {
    console.log('listening on *:3000');
});

因此,在断开连接事件时,我希望使用相同的socket.id重新连接断开连接的用户

socket.on('disconnect',function(){
var disconnect_id = socket.id; //i want reconnect the users here
});

1 个答案:

答案 0 :(得分:6)

默认情况下,Socket.IO没有用于重新连接的服务器端逻辑。这意味着每次客户端想要连接时,都会创建一个新的套接字对象,因此它有一个新的id。由您来实现重新连接。

为此,您需要一种方法为该用户存储内容。如果您有任何类型的身份验证(例如护照) - 使用socket.request,您将在升级发生之前触发初始HTTP请求。因此,从那里,您可以存储所有类型的cookie和数据。

如果您不想在Cookie中存储任何内容,最简单的方法是在连接时发回有关他自己的客户特定信息。然后,当用户尝试重新连接时,再次发送此信息。类似的东西:

var client2socket = {};
io.on('connect', function(socket) {
    var uid = Math.random(); // some really unique id :)
    client2socket[uid] = socket;

    socket.on('authenticate', function(userID) {
        delete client2socket[uid]; // remove the "new" socket
        client2socket[userID] = socket; // replace "old" socket
    });
});

请记住,这只是一个示例,您需要更好地实现一些内容:)也许将信息作为请求参数发送,或以其他方式存储 - 无论对您有用。