2016-10-21 91 views
1

如何將會話特定信息存儲在socket io中?Socket io客戶端特定變量

var client={}; //is this static across all sockets (or connected clients) that are connected? 
io.on('connection', function(socket){ 

    client.connectiontime=Date.now(); 
}); 


//on another io.on('connection') for the same connected client 
io.on('connection', function(socket){ 
store(client.connectiontime); 
} 

如何將客戶端變量僅用於與當前連接的客戶端相關的操作(如果它被認爲是靜態的)?

謝謝。

回答

2

首先,每個套接字都有一個可用於引用它的名稱,但每當同一個客戶端連接時都會更改,所以如果在客戶端離開後應該保留它,這將不會有用。如果您的目標是將連接時間存儲在某個地方(數據庫?),那麼您將不得不從客戶端獲取唯一的標識符,以便再次找到類似登錄名的標識符。然後,您會將日期對象傳遞到處理存儲時間的函數中。

你應該注意,'連接'只在套接字第一次連接時被調用。連接不是您通常會在客戶端執行某些操作時使用的事件,除非它們在服務器程序的每次訪問之間斷開連接。

如果您確定只想使用Client對象,則可能必須創建一個客戶端數組,然後使用套接字ID作爲密鑰才能稍後訪問該對象。這樣,你會碰到這樣的

陣列[socket.id] .connectiontime = Date.now()

var client={}; //is this static across all sockets (or connected clients) that are connected? 
var clients = []; 
io.on('connection', function(socket){ 
    clients[] = { 
       id : socket.id 
       connectiontime : Date.now() 
    } 
}); 


//on another io.on('connection') for the same connected client 
io.on('connection', function(socket){ 
// Here you would search for the object by socket.id and then store 
store(client.connectiontime); 
} 
+0

但是有可以只用於這種特定客戶會話變量? – Josh

+1

在'連接'上生成一個socket.id,這是程序使用識別哪個套接字與它進行通信的id。所以在我提供的代碼中,id:socket.id部分正在使用該唯一標識符。它不會告訴你這個人,因爲如果他們斷開連接並重新連接,它會發生變化,但當連接到服務器代碼 – KM529

+0

時,它將成爲該用戶會話的專用標識符。因此,我需要手動進行管理?我認爲套接字io會提供一些方法來存儲僅適用於每個客戶端會話的值,並將我從維護客戶端及其會話的工作中拯救出來 – Josh