[英]Node.js Socket.io sets up multiple connections
我正在創建一個簡單的socket.io聊天,它使用passport.js進行身份驗證。 但每次用戶注銷並登錄時,舊的套接字連接都會重新連接。 這會導致問題,因為現在有兩個活動連接到一個頁面。 所以我想要做的是當用戶導航到“/ 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.emit('exit');
,然后在服務器端有一個像這樣的監聽器:
socket.on('exit', function(){
socket.disconnect();
});
這將使客戶端與Socket.io斷開連接。 您還可以在服務器端創建一個將用戶名映射到Socket.io套接字ID的對象,並檢查該用戶是否已存在。 如果是,則可以斷開服務器端的套接字ID。 理想情況下,客戶端應在用戶注銷時向服務器發送disconnect
。 像這樣的東西:
$('#logout').click( function() {
socket.disconnect();
window.location = "/logout";
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.