node.js - 在断开连接事件中重新连接套接字

标签 node.js sockets websocket socket.io

我正在尝试在使用相同的 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
});

最佳答案

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

请记住,这只是一个示例,您需要实现一些更好的东西 :) 也许将信息作为请求参数发送,或者以其他方式存储它 - 任何适合您的方式。

关于node.js - 在断开连接事件中重新连接套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34069301/

相关文章:

python 将输出命令发送到客户端套接字

javascript - 如何使用 JavaScript 从被拒绝的 WebSocket 打开握手中读取状态代码?

node.js - Macbook React Native 安装

javascript - 如何(不)嵌套 `then` 生成 Promise 方法?

sockets - 使用 J2ME 进行套接字编程

java - 套接字如何与常见网络 API 相关

java - 如何使用websocket客户端监听rest api

java - 无法在 tomcat 8 上打开与 websocket 的连接

node.js - Nodejs RabbitMQ 服务器上的高性能

javascript - 在 typescript 项目中加载 npm 模块