我们什么时候应该使用 SignalR 自托管,什么时候不应该?
When we should use SignalR self hosted and when we should not?
我正处于在我的项目中使用 SignalR 的阶段,我不知道何时使用自托管选项以及何时不应该使用。例如,如果我愿意在服务器场中托管我的 Web 应用程序,
- 会有单独的托管服务器
- 每个 IIS 服务器中的独立 SignalR 集线器
如果我们想向每个客户端广播消息,这在 SignalR 中是如何工作的
在多个实例中使用 SignalR 运行 的想法是连接到实例 A 的客户端无法从连接到实例 B 的客户端获取消息。
(SignalR scaleout documentation)
However, when you scale out, clients can get routed to different
servers. A client that is connected to one server will not receive
messages sent from another server.
这个问题的解决方案是使用 backplane
- 每次服务器收到消息时,它都会将其转发给所有其他服务器。您可以使用 Azure Service Bus, Redis or SQL.
执行此操作
在我看来,当您不想要完整的 IIS 运行(因为您有一些不需要所有 IIS 重量的轻量级操作)或者您不需要时,您可以使用自主机选项根本不需要 Web 服务器(例如,您想向已经存在的表单应用程序或任何其他进程中添加实时功能)。
请务必阅读 documentation for self-hosting SignalR 并决定您是否真的需要自行托管 SignalR。
如果您在 IIS 下开发 Web 应用程序,我看不出您有任何理由想要自托管 SignalR。
希望这对您有所帮助。祝你好运!
我正处于在我的项目中使用 SignalR 的阶段,我不知道何时使用自托管选项以及何时不应该使用。例如,如果我愿意在服务器场中托管我的 Web 应用程序,
- 会有单独的托管服务器
- 每个 IIS 服务器中的独立 SignalR 集线器
如果我们想向每个客户端广播消息,这在 SignalR 中是如何工作的
在多个实例中使用 SignalR 运行 的想法是连接到实例 A 的客户端无法从连接到实例 B 的客户端获取消息。
(SignalR scaleout documentation)
However, when you scale out, clients can get routed to different servers. A client that is connected to one server will not receive messages sent from another server.
这个问题的解决方案是使用 backplane
- 每次服务器收到消息时,它都会将其转发给所有其他服务器。您可以使用 Azure Service Bus, Redis or SQL.
在我看来,当您不想要完整的 IIS 运行(因为您有一些不需要所有 IIS 重量的轻量级操作)或者您不需要时,您可以使用自主机选项根本不需要 Web 服务器(例如,您想向已经存在的表单应用程序或任何其他进程中添加实时功能)。
请务必阅读 documentation for self-hosting SignalR 并决定您是否真的需要自行托管 SignalR。
如果您在 IIS 下开发 Web 应用程序,我看不出您有任何理由想要自托管 SignalR。
希望这对您有所帮助。祝你好运!