【问题标题】:SignalR(Hub) can send a message except signal maker?SignalR(Hub) 可以发送除信号制造者以外的消息吗?
【发布时间】:2017-12-23 18:35:58
【问题描述】:

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

我真的很想向所有联系人发送消息除了发起活动的人。

例如,

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

Client A 输入一条消息,“Hello”然后点击提交。

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

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

我怎样才能实现它?

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

【问题讨论】:

  • @dfowler 你能帮帮我吗^^?

标签: asp.net signalr


【解决方案1】:

目前无法在服务器上过滤消息,但您可以阻止从客户端发送给调用者的消息。如果您查看 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);
};

希望对您有所帮助。

【讨论】:

  • 我觉得这对我很有帮助。谢谢你的答案。还要感谢您提供的出色框架。祝福你。
  • 自您回复后 id 属性是否发生了变化?我无法在客户端获取 id,返回未定义。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2014-10-12
    • 2020-02-15
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多