【问题标题】:Create SignalR server to use across multiple applications创建 SignalR 服务器以跨多个应用程序使用
【发布时间】:2020-02-05 11:26:51
【问题描述】:

我正在构建一个面向微服务的 .NET Core Web 应用程序,现在我想添加实时通信。可以创建 SignalR 服务器并将其发布到 Azure 上吗?我想在我的微服务中使用它来在某个事件发生时向用户发送消息。

【问题讨论】:

    标签: asp.net-core signalr microservices


    【解决方案1】:

    是的,您可以将您的应用部署到 Azure 并将您的用户指向您的中心端点,而不会出现任何问题。您有两种选择:

    • 如果要扩展应用程序,请使用 SignalR 并手动管理连接和其他 signalR 内容。例如,当您有 2 个 Web 应用程序并且客户端连接到其中一个应用程序时,您需要“告诉”其他应用程序您有一个使用 Redis Blackplane 连接的新客户端。
    • 使用Azure SignalR就不需要这种管理了,你只需要提供一个带有hub逻辑的app。因此,当客户端连接到您的集线器时,它会自动重定向到 Azure SignalR

    您可以在此处阅读有关这两个选项的更多信息: https://docs.microsoft.com/pt-pt/azure/azure-signalr/signalr-concept-scale-aspnet-core

    为什么不自己部署 SignalR?'

    将您自己的支持 ASP.NET Core SignalR 的 Azure Web 应用程序部署为整个 Web 应用程序的后端组件仍然是一种有效的方法。 使用 Azure SignalR 服务的主要原因之一是简单。使用 Azure SignalR 服务,您无需处理性能、可伸缩性、可用性等问题。通过 99.9% 的服务级别协议为您处理这些问题。 此外,WebSockets 通常是支持实时内容更新的首选技术。但是,随着您的扩展,对大量持久 WebSocket 连接进行负载平衡会成为一个需要解决的复杂问题。常见的解决方案利用:DNS 负载平衡、硬件负载平衡器和软件负载平衡。 Azure SignalR 服务会为您处理此问题。 另一个原因可能是您根本不需要实际托管 Web 应用程序。您的 Web 应用程序的逻辑可能会利用无服务器计算。例如,您的代码可能仅使用 Azure Functions 触发器按需托管和执行。这种情况可能很棘手,因为您的代码仅按需运行,并且不与客户端保持长连接。 Azure SignalR 服务可以处理这种情况,因为该服务已经为你管理连接。有关更多详细信息,请参阅有关如何将 SignalR 服务与 Azure Functions 一起使用的概述。

    【讨论】:

    • 谢谢,这很有帮助!还有一个问题:我必须在每个微服务中创建一个集线器并实现方法吗?或者我可以创建类似 HubService 的东西并将其注入到我需要的地方?
    • 您可以在映射 SignalR 时注入您的集线器,例如 app.UseAzureSignalR(routes => { routes.MapHub<YourHubService>("/someRoute"); }); 这对 SignalRAzure SignalR 均有效。
    • 很遗憾,我无法使用 Azure SignalR 服务(我的 Azure 订阅没有权限),所以我必须部署自己的 SignalR Web 应用程序。我已经搜索了 2 多个小时如何创建和部署 SignalR Web 应用程序,而不是从我的微服务连接到它,但我没有发现任何有用的东西。每个人似乎都将 SignalR 直接集成到项目中,但我不想为我拥有的每个微服务都这样做。有什么解决办法吗?
    • 首先创建 signalR 应用并部署到 azure。然后,您可以创建一个库,该库将连接到您的 SingalR 应用程序并将其导入您需要的每个项目中。
    • 我如何连接到 SignalR 应用程序?
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多