2011-11-04 36 views
6

Tôi đang tìm cách lấy tất cả các đối tượng ổ cắm ra khỏi số io.sockets và lặp lại từng đối tượng.Lấy tất cả các đối tượng ổ cắm trong io.socket

Cái gì như:

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

Hoặc là tôi đang làm sai này hay tôi phải mất một cái gì đó. Suy nghĩ?

+0

Vì vậy, vấn đề hoặc câu hỏi là gì? – thejh

+0

Tại sao bạn cảm thấy điều đó? –

+0

Tôi chỉ tò mò, điều gì sẽ là trường hợp sử dụng cho điều này? – alessioalex

Trả lời

14

Phương pháp chính thức là:

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

Hoặc lọc theo phòng:

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

này được khuyên qua đề nghị trên như socket.io là cấu trúc dữ liệu nội bộ luôn có thể thay đổi và có khả năng phá vỡ tất cả các mã của bạn với các bản cập nhật trong tương lai. Bạn ít rủi ro hơn khi bạn sử dụng phương thức official này.

+2

Đây là khiếu nại của tôi về Socket.io tuyệt vời khác: trong khi có rất nhiều [ví dụ] (http://socket.io/#how-to-use), không có tài liệu API súc tích nào, để tôi đoán theo cách của tôi với đề xuất đầu tiên của tôi. – josh3736

+0

Đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn. –

+1

josh3736 có tài liệu là một chút của một atm đau tại chỗ. chúng ta có lẽ nên chạy một công cụ JSDoc trên mã của chúng ta để tạo ra một tài liệu API nhỏ. – 3rdEden

2

này có thể hoặc không thể được 'tài liệu', nhưng hoạt động:

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

Sử dụng io.sockets.clients():

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

Bạn có thể sử dụng tuyệt vời node-inspector để đính kèm vào của bạn ứng dụng và kiểm tra nội dung của s.

+0

Đây chính xác là những gì tôi cần. Kiểm tra io.sockets đã làm cho nó rõ ràng với tôi. Tôi nhận ra câu hỏi của tôi không rõ ràng, cảm ơn bạn đã trả lời. –

Các vấn đề liên quan