【发布时间】:2020-02-05 11:26:51
【问题描述】:
我正在构建一个面向微服务的 .NET Core Web 应用程序,现在我想添加实时通信。可以创建 SignalR 服务器并将其发布到 Azure 上吗?我想在我的微服务中使用它来在某个事件发生时向用户发送消息。
【问题讨论】:
标签: asp.net-core signalr microservices
我正在构建一个面向微服务的 .NET Core Web 应用程序,现在我想添加实时通信。可以创建 SignalR 服务器并将其发布到 Azure 上吗?我想在我的微服务中使用它来在某个事件发生时向用户发送消息。
【问题讨论】:
标签: asp.net-core signalr microservices
是的,您可以将您的应用部署到 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 一起使用的概述。
【讨论】:
app.UseAzureSignalR(routes => { routes.MapHub<YourHubService>("/someRoute"); }); 这对 SignalR 和 Azure SignalR 均有效。
【讨论】: