【问题标题】:Broadcast SignalR message to all clients in Orleans向奥尔良的所有客户端广播 SignalR 消息
【发布时间】:2021-09-02 04:59:23
【问题描述】:

普通SignalR 可以广播消息而无需过滤。

https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-server#selectingclients

Clients.All.Send()

这将向所有连接到Hub 的客户端广播消息。同时,SignalR.Orleans 似乎只向特定组提供消息。

HubContext.Group(groupName).Send()

https://github.com/OrleansContrib/SignalR.Orleans/blob/master/samples/ChatSample/Grains/UserNotificationGrain.cs

问题

有没有办法在奥尔良广播 SignalR 消息而不过滤和创建组?

【问题讨论】:

  • 只需HubContext.All.Send() 应该可以正常工作。实现是here,如您所见,它们通过流向所有节点中的所有集线器广播消息。
  • @AliZeinali HubContext 好像没有这个方法。附图片。您提供的链接似乎扩展了 Silo 的方法,不确定我是否可以并且应该从谷物中调用 Silo...
  • 您使用的是哪个版本的 .NET?您使用的 HubContext 不是 SignalR 的一部分,因为 SignalR HubContext 是内部的,它不公开
  • 您应该使用具有Clients 属性的IHubContext<MessageHub>,然后您可以访问All
  • @AliZeinali HubContext 实现的链接非常有用。我现在可以访问Clients.All。不确定常规 SignalR 在没有奥尔良背板的情况下能否正常工作,例如可能有来自多个孤岛的重复消息,但现在我可以尝试一下。随时发布到IHubContext 的链接作为答案。我会接受的。谢谢。

标签: asp.net signalr signalr-hub orleans


【解决方案1】:

您可以使用IHubContext&lt;THub&gt;.Clients.All,它会正常工作。

SignalR.Orleans 包实现了自己的 HublifetimeManager(github),当您将 SignalR 配置为 AddOrleans 时,它会将 DefaultHublifetimeManager(github) 替换为自己的实现,因此任何使用 @987654332 @ 或IHubContext&lt;THub&gt;.Groups 将使用HublifetimeManager 的奥尔良实现。 因此,当您使用IHubContext&lt;THub&gt;.Clients.All 时,它将使用OrleansHubLifetimeManager&lt;THub&gt; 发送消息,而在detail 中,它将在Orleans Streams 的帮助下将您的消息广播到所有孤岛

仅供参考: IHubContext&lt;THub&gt;.Clients.All 返回一个AllClientProxy&lt;THub&gt; 的实例,它使用HublifetimeManager.SendAllAsync 方法发送消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    相关资源
    最近更新 更多