2011-12-08 46 views
7

Tôi đang học SingalR (https://github.com/SignalR/SignalR).SignalR (Hub) có thể gửi tin nhắn ngoại trừ bộ tạo tín hiệu không?

Tôi thực sự muốn gửi thư đến tất cả kết nối ngoại trừ người tạo sự kiện.

Ví dụ,

Trong Chatting ứng dụng, có ba khách hàng (A, B, C).

Khách hàng A nhập một tin nhắn, "Xin chào" và nhấn nút.

Khách hàng.addMessage (dữ liệu); gửi "Xin chào" với tất cả cleint (bao gồm cleint A)

Tôi muốn gửi "Hello" chỉ khách hàng B và C.

Làm thế nào tôi có thể đạt được điều đó?

// I think this can get all Clients, right? 
var clients = Hub.GetClients<Chat>(); 
+0

@dfowler Bạn có thể giúp tôi một litte ^^ không? – ShootingStar

Trả lời

12

Hiện không có cách nào để lọc thư trên máy chủ nhưng bạn có thể chặn tin nhắn cho người gọi từ phía máy khách. Nếu bạn xem xét một số mẫu trên signalr, bạn sẽ thấy rằng chúng gán cho mỗi máy khách một id được tạo cho máy khách trong một phương thức (thường được gọi là tham gia). Bất cứ khi nào bạn gọi một phương thức từ hub, chuyển id của máy khách gọi, sau đó ở phía máy khách thực hiện kiểm tra để đảm bảo rằng id của máy khách không giống như người gọi. ví dụ.

public class Chat : Hub { 
    public void Join() { 
     // Assign the caller and id 
     Caller.id = Guid.NewGuid().ToString(); 
    } 

    public void DoSomething() { 
     // Pass the caller's id back to the client along with any extra data 
     Clients.doIt(Caller.id, "value"); 
    } 
} 

phía khách hàng

var chat = $.connection.chat; 
chat.doIt = function(id, value) { 
    if(chat.id === id) { 
     // The id is the same so do nothing 
     return; 
    } 

    // Otherwise do it! 
    alert(value); 
}; 

Hy vọng rằng sẽ giúp.

+0

Tôi nghĩ điều này thực sự hữu ích đối với tôi. Cảm ơn bạn đã trả lời. Ngoài ra Cảm ơn bạn cho khuôn khổ tuyệt vời. ban phước cho bạn. – ShootingStar

+0

Thuộc tính id có thay đổi kể từ khi bạn trả lời không? Tôi không thể có được id trên phía khách hàng, trả về undefined. –

5

Hiện tại (v1.0.0) có thể bằng cách sử dụng thuộc tính Clients.Others trong Hub của bạn.

Ví dụ: Clients.Others.addMessage(data) gọi phương thức addMessage trên tất cả khách hàng ngoại trừ người gọi.

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