2017-01-23 38 views
0

我有Node/Express應用程序,我試圖跟蹤活動用戶。使用Socket.io和Firebase跟蹤活動用戶

該應用程序依靠外部API發出並接收JWT令牌。這些令牌直接傳遞給客戶端,在客戶端進行存儲並用於後續API請求。這就是說,我沒有使用節點「會話」。

我正在使用socket.io鉤入自定義login,logoutdisconnect事件。當這些事件觸發時,我可以根據需要更新數據庫(firebase)並添加/刪除活動用戶。

問題是我的應用程序在多個服務器間負載均衡,所以我不能在socket.id之間鍵入活動用戶,因爲它可能會更改。我的想法是通過user_id鍵入活動用戶,但是,我無法弄清楚如何從disconnect事件中獲取用戶標識。其他事件被觸發的客戶,所以我可以只發送用戶ID到服務器...

client.js

import io from 'socket.io-client'; 

const socket = io('/'); 

socket.emit('login', {user_id: 1234, email: '[email protected]'}) 

server.js

io.on('connection', (socket) => { 
    const activeUsersRef = admin.database().ref('activeUsers'); 

    socket.on('login', (userData) => { 
     activeUsersRef.update({ 
      [userData.user_id]: userData 
     }) 
    }); 

    socket.on('logout', (userData) => { 
     activeUsersRef.update({ 
      [userData.user_id]: null 
     }) 
    }); 

    socket.on('disconnect',() => { 

     // How to get user ID? 
     activeUsersRef.update({ 
      [???]: null 
     }) 

    }); 
}); 

如果我沒有跟蹤節點服務器中的用戶會話,我如何才能訪問disconnect事件中的用戶ID?

+1

我發佈了以前的答案[這裏](http://stackoverflow.com/questions/37591541/how-to-change-status-of-perticular-user-when-socket-is-disconnect/37592164#37592164)這可能有幫助 – Rho

回答

0

我不知道您的具體情況是什麼,但這裏是一些代碼,爲我工作:

io.on('connection', function(socket){ 

    socket.on('chat message', function(msg){ 
    io.emit('chat message', msg); 
    }); 

    socket.on('login', (userData) => { 
     socket.on('disconnect', function() { 
      console.log(userData); 
     }); 
    }); 
}); 

顯然,你將需要改變有關userData如何存儲和顯示一些次要的東西。

希望這有助於!