7

我正在学习 SingalR(https://github.com/SignalR/SignalR)。

我真的很想向所有连接发送消息,但发起事件的人除外。

例如,

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

客户端 A 键入消息“Hello”并单击提交。

Clients.addMessage(data); 向所有客户发送“Hello”(包括客户 A)

我只想向客户端 B 和 C 发送“Hello”。

我怎样才能实现它?

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

2 回答 2

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

希望有帮助。

于 2011-12-08T10:55:44.957 回答
5

现在(v1.0.0)可以通过Clients.Others在您的Hub.

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

于 2013-03-01T15:03:44.173 回答