2011-12-08 23 views
7

我正在学SingalR(https://github.com/SignalR/SignalR)。SignalR(Hub)可以发送除信号发生器之外的消息吗?

我真的想发送一条消息给所有连接,除了发生事件的人。

例如,

在聊天应用,有三个客户端(A,B,C)。

客户端A键入一条消息,“Hello”和clikc提交。

Clients.addMessage(data);发送“你好”所有Cleint(包括cleint A)

我要发“你好”只有客户端B和C.

我怎样才能实现呢?

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

@dfowler你能帮我一个litte ^^吗? – ShootingStar

回答

12

今天没有办法在服务器上过滤消息,但是可以从客户端阻止向调用者发送消息。如果你看看signalr上的一些示例,你会看到他们在一个方法(通常称为join)中为每个客户端分配一个生成的id给客户端。无论何时从集线器调用方法,传递调用客户端的ID,然后在客户端执行检查以确保客户端的ID与调用者不相同。例如

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"); 
    } 
} 

客户端

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); 
}; 

希望有所帮助。

+0

我认为这对我很有帮助。谢谢你的答案。也谢谢你的伟大框架。祝福你。 – ShootingStar

+0

自回复以来,ID属性是否发生了变化?我不能在客户端获得id,返回undefined。 –

5

现在(v1.0.0)可能在您的Hub中使用Clients.Others属性。

例如:Clients.Others.addMessage(data)在除呼叫方之外的所有客户端上调用方法addMessage

相关问题