簡體   English   中英

Node.js Socket.io設置多個連接

[英]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.io:2.0.3
  • 護照:0.4.0
  • 護照本地:1.0.0
  • 表達:4.15.4
  • 快遞會:1.15.5
  • cookie-parser:1.4.3
  • body-parser: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";
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM