2014-02-26 62 views

回答

2

從Sails v0.9.8開始,您可以使用config/sockets.js中的onConnectonDisconnect函數在套接字連接或斷開系統時執行一些代碼。這些函數可讓您訪問會話,因此您可以使用它來跟蹤用戶,但請記住,僅僅因爲套接字斷開連接,並不意味着用戶已註銷!他們可以打開幾個選項卡/窗口,每個選項卡都有自己的套接字,但所有這些都共享會話。

跟蹤的最佳方法是使用Sails PubSub方法。如果你有一個User模型和UserControllerlogin方法,你可以不喜歡在最新帆編譯:

// UserController.login 

login: function(req, res) { 

    // Lookup the user by some credentials (probably username and password) 
    User.findOne({...credentials...}).exec(function(err, user) { 
    // Do your authorization--this could also be handled by Passport, etc. 
    ... 
    // Assuming the user is valid, subscribe the connected socket to them. 
    // Note: this only works with a socket request! 
    User.subscribe(req, user); 
    // Save the user in the session 
    req.session.user = user; 

    }); 
} 


// config/sockets.js 

onConnect: function(session, socket) { 

    // If a user is logged in, subscribe to them 
    if (session.user) { 
    User.subscribe(socket, session.user); 
    } 

}, 

onDisconnect: function(session, socket) { 

    // If a user is logged in, unsubscribe from them 
    if (session.user) { 
    User.unsubscribe(socket, session.user); 
    // If the user has no more subscribers, they're offline 
    if (User.subscribers(session.user.id).length == 0) { 
     console.log("User "+session.user.id+" is gone!"); 
     // Do something! 
    } 
    } 

} 
+0

感謝您的答覆。這答案非常有趣和有用.Thanks了很多。我現在試過了。正如你所說,即使IAM沒有註銷,套接字也會斷開連接。所以,當一個人離線時,即當一個人註銷時,我也需要跟蹤。 – Mahahari