2012-04-26 32 views
78

Sự khác nhau giữa io.sockets.emit và socket.broadcast.emit là gì? Chỉ phát sóng đó phát ra cho tất cả mọi người NHƯNG ổ cắm gửi nó?Sự khác nhau giữa io.sockets.emit và chương trình phát sóng là gì?

Nó có vẻ như họ có thể được sử dụng thay thế cho nhau:

io.sockets.on('connection', function (socket) { 
    //these should do the same thing 
    io.sockets.emit('this', { receivers: 'everyone'}); 

    socket.broadcast.emit('this', { receivers: 'everyone but socket'}); //emits to everyone but socket 
    socket.emit('this', { receivers: 'socket'}); //emits to socket 
}); 

Trả lời

137

io.sockets.emit sẽ gửi đến tất cả các khách hàng

socket.broadcast.emit sẽ gửi thông điệp tới tất cả các khách hàng khác, ngoại trừ kết nối mới được tạo ra

This Socket.IO Wiki post will help everyone reading this question:

+16

cũng mất 3 giờ chụp ảnh khó khăn để tìm ra. – Petrogad

+0

Tôi có thể xác minh đây thực sự là hành vi, nhưng tôi không thể thấy bất kỳ tài liệu nào về socket.broadcast cũng như socket.broadcast.emit trong tài liệu Github cũng như trên [trang web Socket.io] (http://socket.io/docs/ client-api /). Tui bỏ lỡ điều gì vậy? (và wiki đã biến mất) – scipilot

+1

Điều thậm chí "tốt hơn" về điều này là ứng dụng "chat" ví dụ sử dụng độc quyền 'socket.broadcast.emit' trong khi API đó không bao giờ được ghi lại ở bất cứ đâu. –

37

socket.broadcast.emit() hoạt động tương tự như io.sockets.emit, nhưng thay vì phát ra tất cả các ổ cắm được kết nối, nó sẽ phát ra tất cả ổ cắm được kết nối ngoại trừ ổ cắm đang được gọi. Vì vậy, trong trường hợp này, socket được tham chiếu bởi socket sẽ không nhận được sự kiện.

+4

một cập nhật khác - theo câu trả lời của Jayantha và phân tích của riêng tôi, nó cũng KHÔNG phát ra các kết nối mới được tạo ra tức là các kết nối máy khách mới được tạo sau khi 'socket' được tạo. Đây là một sự khác biệt quan trọng và quan trọng !! –

+4

"Kết nối mới được tạo" mà Jayantha đề cập đến là ổ cắm có sự kiện kết nối đang được xử lý và ai sẽ phát sóng chương trình phát sóng.Điểm phát sóng là nó đi đến tất cả các khách hàng ngoại trừ các 'phát sóng' socket - thứ tự mà các kết nối khách hàng được thành lập không có sự khác biệt. – Semicolon

+0

Đây phải là câu trả lời chấp nhận. –

1

Kịch bản: 1: - Bằng việc sử dụng các io.sockets.emit Detailed Diagram:-io.sockets.emit

Đây Mỗi socket nhận được tin nhắn bao gồm Initiator.

// BY IO>SOCKETS>EMIT 
    io.sockets.emit('MyChannelBroadcast', 
       { 
       owner:"Anshu Ashish", 
       clientCount:clients, 
       message:"Welcome All" 
       } 
    ); 

Kịch bản: 2: - Bằng việc sử dụng các socket.broadcast.emit Detailed Diagram:-socket.broadcast.emit

Đây Mỗi Sockets đang nhận được tin nhắn Trừ Một tức là Initiator.

// BY SOCKET>BROADCAST>EMIT 
    socket.broadcast.emit('BroadCastExceptMe',{data:"HAVE A NICE DAY"}); 

Kết luận: - Bây giờ nó sẽ hoàn toàn phụ thuộc yêu cầu kinh doanh của chúng tôi rằng đó sẽ là một lợi thế.

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