gpt4 book ai didi

javascript - Node.js Socket.io 建立多个连接

转载 作者:搜寻专家 更新时间:2023-11-01 00:05:09 28 4
gpt4 key购买 nike

我正在创建一个使用 passport.js 进行身份验证的简单 socket.io 聊天。但是每次用户注销并登录时,旧的套接字连接都会重新连接。这会导致问题,因为现在一个页面有两个事件连接。所以我想做的是在用户导航到“/logout”时结束当前连接。

var socketNotLoaded = true;
var socket;

app.get('/', function(req, res) {
if (req.isAuthenticated()) {
if(socketNotLoaded) { //is true when new connection is required
require("./socket")(io,req.user) //runs the socket.io script
socketNotLoaded = false;
}
res.render('index', pug.get(req.user));
} else {
res.render('notloggedin', pug.get());
}
})

app.get('/logout', function(req, res) {
socketNotLoaded = true;
req.logout();
res.redirect('/');
})

我正在使用

  • socket.io: 2.0.3
  • Passport :0.4.0
  • 本地 Passport :1.0.0
  • express :4.15.4
  • 快速 session :1.15.5
  • cookie 解析器:1.4.3
  • 正文解析器:1.17.2

最佳答案

在客户端,当用户想要注销时,您可以执行 socket.emit('exit');,然后在服务器端有一个监听器,如下所示:

socket.on('exit', function(){
socket.disconnect();
});

这将断开客户端与 Socket.io 的连接。您还可以在服务器端创建一个对象,将用户名映射到 Socket.io 套接字 ID,并执行检查以查看该用户是否已经存在。如果是这样,那么您可以在服务器端断开该套接字 ID。理想情况下,客户端应该在用户注销时向服务器发送一个disconnect。像这样:

 $('#logout').click( function() {
socket.disconnect();
window.location = "/logout";
});

关于javascript - Node.js Socket.io 建立多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185488/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com