当前位置:  开发笔记 > 编程语言 > 正文

在断开事件中重新连接套接字

如何解决《在断开事件中重新连接套接字》经验,为你挑选了1个好方法。

我试图在使用相同的socket.id触发断开连接事件后重新连接套接字.这是我的套接字配置

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
});

Andrey Popov.. 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
    });
});

请记住,这只是一个示例,你需要更好地实现一些东西:)也许发送信息作为请求参数,或以另一种方式存储 - 无论什么对你有用.



1> Andrey Popov..:

默认情况下,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
    });
});

请记住,这只是一个示例,你需要更好地实现一些东西:)也许发送信息作为请求参数,或以另一种方式存储 - 无论什么对你有用.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有