【问题标题】:SignalR - NLB Server Change and Suggested Way to Scale-OutSignalR - NLB 服务器更改和建议的横向扩展方式
【发布时间】:2016-08-11 07:39:06
【问题描述】:

我有 silverlight 网络应用程序。这个网络应用程序在 4 个服务器上运行,它们前面有一个 NLB。我需要在我的网络应用中使用 SignalR。

让我们考虑一下这种情况。 Client#1 连接到 Server#1,一切正常。他们通过集线器完美地相互交流。然后突然 NLB 将 Client#1 分配给 Server#2。

现在,Connection 和 Hub 会发生什么?他们将如何沟通? Client#1 和 Server#1 之间的连接是如何设置的?

PS:我对 NLB 了解不多。也许这是个愚蠢的问题,但我找不到很好的解释。

我的第二个问题是,对于客户端可能不多(少于 10K)的 .NET Silverlight 应用程序而言,横向扩展(Azure、SQL、Redis)中哪种方式最适合?

不是:我在我的应用程序中高度使用 MS SQL、SQL Server。

【问题讨论】:

  • 您需要使用背板。 SignalR 提供与 Redis、SQL Server 和服务总线的挂钩。

标签: silverlight signalr scaling nlb


【解决方案1】:

在我看了这个内容丰富的video 之后,我找到了我的问题的答案。

基本上,当客户端分配到其他服务器节点时,新连接将自动建立。旧连接丢失,但无论如何,如果您使用背板,所有客户端都可以收到通知。因此,这不是问题。

集线器对象也不是问题,因为它是临时对象,即在每个新的单个操作中都会创建一个新的集线器对象。因此,这也不是问题。服务器和客户端之间没有持久的集线器对象。即使只有一个服务器和一个客户端,每次操作都会销毁和创建集线器。

唯一的问题是,如果您使用组,那么当客户端连接到其他服务器时,组信息会丢失。服务器不维护组或组成员的列表。因此,在这种情况下,您需要使用数据库,并且可以从数据库手动更新。客户端和新服务器建立新连接后,可以在数据库中搜索该客户端,如果找到该客户端的组信息,则可以再次手动重新注册到该组。

对于选择背板,没有最快或最好的方法。在 Azure Service Bus、Redis、SQL 中,没有人能说这种方式更快或更好。这实际上取决于您的应用程序。如果您已经在使用 MS Azure 服务,请为您的 Web 应用选择 Azure 实现。如果您在应用程序中使用 Redis,请使用 Redis。否则,您可以选择 SQL。正如我所说,它们或多或少都相同。选择一个最适合您的网络应用的。

这些都是从视频和SignalR官方网站page.得到的 该站点是最好的 SignalR 教程和 api 指南站点之一。强烈建议浏览所有部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-02
    • 2013-11-02
    • 2013-01-19
    • 2022-11-28
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    相关资源
    最近更新 更多