2011-11-04 15 views
6

我期待從io.sockets中獲取所有單個套接字對象並遍歷每個套接字對象。檢索io.socket中的所有套接字對象

喜歡的東西:

for (socket in io.sockets.something()) { 
    // do something with each socket 
} 

無論我在做這個錯誤的或者我必須失去了一些東西。思考?

+0

那麼,問題或問題是什麼? – thejh

+0

你爲什麼這樣認爲? –

+0

我只是好奇,這是什麼用例呢? – alessioalex

回答

14

官方的方法是:

io.sockets.clients().forEach(function (socket) { .. }); 

或過濾器由房間:

io.sockets.clients('roomname') .. same as above .. 

此建議在上述建議如socket.io的內部數據結構總是可以有所變動,並可能將來的更新會破壞您的所有代碼。當你使用這種方法時,你的風險要小得多。

+2

這是我對這個奇妙的Socket.io的一個抱怨:​​雖然有很多[示例](http://socket.io/#how-to-use),但沒有簡明的API文檔,讓我猜測我的方式對我的第一個建議。 – josh3736

+0

這正是我正在尋找的。謝謝。 –

+1

josh3736是的文檔是有點痛處atm。我們應該在我們的代碼上運行一個JSDoc工具來創建一個小的API文檔。 – 3rdEden

2

這可能會或可能不會被 '記錄在案',但工作原理:

for (var id in io.sockets.sockets) { 
    var s = io.sockets.sockets[id]; 
    if (!s.disconnected) { 
     // ... 
     // for example, s.emit('event', { ... }); 
    } 
} 

使用io.sockets.clients()

io.sockets.clients().forEach(function(s) { 
    // ... 
    // for example, s.emit('event', { ... }); 
}); 

您可以使用優秀的node-inspector附加到您的應用程序並檢查s的內容。

+0

這正是我所需要的。檢查io.sockets對我來說很明顯。我意識到我的問題並不清楚,謝謝你的回答。 –