我是新手,我正在構建一個遊戲,用戶需要登錄並且可以與其他當前登錄的用戶進行交互。驗證用戶/套接字io
我最初的想法是,他們登錄後,將他們的/他們的websocket客戶端ID添加到當前登錄的用戶數組,並有我操縱知道誰登錄或不。
這是一個正常的方式去做這種事情嗎?
謝謝!
我是新手,我正在構建一個遊戲,用戶需要登錄並且可以與其他當前登錄的用戶進行交互。驗證用戶/套接字io
我最初的想法是,他們登錄後,將他們的/他們的websocket客戶端ID添加到當前登錄的用戶數組,並有我操縱知道誰登錄或不。
這是一個正常的方式去做這種事情嗎?
謝謝!
取決於您對「正常」的定義。 ;-)
通常,您使用的服務器將提供一些管理「用戶狀態」的機制,包括用戶是否已登錄到您的應用程序。
例如,節點的「表達」庫(和「連接」表達應用「下」)提供了一個req.session對象只是這個目的,所以你可以做這樣的事情:
// user login via POST
// assumes we're posting two values: username and password
// as urlencoded data
app.post('/login',function(req,res){
var username=req.body['username']||'',
password=req.body['password']||'';
// check post data (username,password)
// against list of allowed users
if(isAuthorized(username,password)) { // you provide isAuthorized()
req.session.authorized=true;
}
else {
// display an error message to user
// and redirect back to the login form
}
});
// user logout via GET
app.get('/logout',function(req.res){
req.session.destroy();
});
然後當你想爲用戶提供受保護的頁面,首先檢查req.session.authorized是否爲真,如果不是,則重定向到登錄表單。
見明示的文檔的更多的http://expressjs.com/guide.html
剛剛找到最終的解決方案在這裏:http://www.danielbaulig.de/socket-ioexpress/
它說明了如何使用會話無論是明示或node.js中 而且你可以使用redisStore進行永久會話(理想情況下,每分鐘重啓服務器3次:))
雖然這可能在理論上回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。 – 2012-01-04 13:05:17
登錄用戶的子集之間的通信如何?我會用一些快遞的部分來識別它們嗎?或在連接,當授權=真時,我會保存他們的客戶端ID到我自己的對象在內存中,直到斷開連接? – fancy 2011-05-11 20:28:06
不知道您的要求,很難回答您的問題。對用戶進行「分組」的一種可能方式可能是將標籤添加到用戶的記錄中,以指示一個或多個組中的成員身份,當用戶希望與其他組成員通信時可以使用該組。這可以很容易地與Redis的pub/sub功能相結合來處理羣組間消息。 – 2011-05-12 16:53:29