3

我有 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。

4

1 回答 1

4

看完这个内容丰富的视频后,我找到了问题的答案。

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

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

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

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

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

于 2016-08-15T13:55:12.550 回答