2013-08-01 45 views
0

似乎socket.io不能發送連接用戶的列表中,這樣的:不能發出sIo.sockets.clients()

socket.emit('users', sIo.sockets.clients()); 

它給了我下面的錯誤:

/Users/enrico/Desktop/helloExpress/node_modules/socket.io/lib/parser.js:75 
data = JSON.stringify(ev); 
      ^
TypeError: Converting circular structure to JSON 

顯然它不能串化從sIo.sockets.clients()返回的值如何解決這個問題的任何想法?提前致謝。

回答

0

由於問題是circular reference沒有真正的「修復它」。循環引用意味着結構中的某個對象指向對象的另一部分,從而形成無限循環。你能做的就是這樣的。

var returnList = []; 
var clients = sIo.sockets.clients(); // grab list of clients, assuming its an array 
for(var i = 0; i < clients.length; i++) { 
    var client = clients[i]; // next client in array 

    // push values into return list 
    returnList.push({ 
    name: client.name, 
    someOther: client.value, 
    another: client.thing 
    }); 
} 

// emit cleaned up list 
socket.emit('users', returnList); 

有了這段代碼,你可以選擇你想要的值併發送這些值。這有幾個原因是有好處的。由於這個客戶端列表很可能是一個內部實現也可能發送有關其他客戶端連接的信息。

這也是非常具有推測性的,因爲我不是100%所使用的庫,看起來像Socket.IO,但我找不到任何socket.clients()方法。

+0

我使用socket.io。不知道爲什麼,但你應該有這樣的方法。感謝您的回答:) –

+0

我只是簡單地瀏覽了該方法的代碼,所以我並不感到驚訝,並且我錯過了它。 –