2014-03-18 56 views
0

我有一個正在正常工作輪詢的API,並與發出的結果填充HTML頁面中的node.js/socket.io web應用。Socket.io:散發出爲特定客戶

我的問題是,有多個用戶需要使用這一點,我想他們的情況下分開,以便每個人只會收到他們的查詢的結果。

現在,當有人使用該網站就會返回,可能是也使用本網站的其他用戶的結果。 我曾嘗試使用這種方法來解決這個問題:

var clients = {}; 
io.sockets.on('connection', function(socket){ 
    console.log("this is "+socket.id); 
    clients.id = socket.id; 
}) 

io.sockets.socket(clients.id).emit('progress',{info:listing}); 

當然,這得到與登錄到網站,這樣不將所釋放到原來的用戶現在正在發出新的一切每個新用戶更換用戶。

我想知道的是,如果有任何內置功能來解決這個問題,或者我應該用另一種持久化存儲進行。

任何幫助將不勝感激。

編輯

在程序只是存儲在express.sessionStore插座對象,而不是。 io.sockets.on(function(socket){ request.sessionStore.socket = socket; })

上面的代碼現在可以工作並且只發送給事件發起者。

+1

爲什麼不使用socket.emit()?它只會發送給觸發事件的客戶 –

+0

@Momary這是我的問題 - 我現在發佈修訂。 – MonsterWimp757

回答

0

爲什麼不創建a separate room爲每個用戶? room_<user_id>

你可以發出數據到一個房間沒有問題,而且用戶可以使用多個瀏覽器窗口,在「他」的空間,以便多個參與者然後再加入。相反,如果只有一個將user-id映射到一個連接的數組,則會遇到問題。

由於似乎no limit to the number of rooms,我沒有看到一個理由實施的東西,已經存在默認功能。

相關問題