2016-08-11 76 views
1

我有Silverlight Web应用程序。这个网络应用程序运行在4台服务器上,前面有一个NLB。我需要在我的web应用程序中使用SignalR。SignalR - NLB服务器更改和推荐的扩展方式

让我们思考一下这种情况。 客户端#1连接到服务器#1,一切正常。他们正在通过一个集线器完美地相互沟通。然后突然NLB将客户端#1分配给服务器#2。

现在,Connection和Hub会发生什么?他们将如何沟通? 客户端#1和服务器#1之间的连接如何设置? PS:我对NLB了解不多。也许这是一个愚蠢的问题,但我找不到一个好的解释。

我的第二个问题是,扩展(Azure,SQL,Redis)中的哪种方式对于可能不是很多客户端(小于10K)的.NET Silverlight应用程序是最好的?

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

+1

您需要使用背板。 SignalR提供Redis,SQL Server和Service Bus挂钩。 –

回答

1

当我看到这个非常翔实的video后,我找到了我的问题的答案。

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

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

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

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

这些都是从视频和SignalR的官方网站得到的东西page. 这个网站是最好的SignalR教程和API指南网站之一。强烈建议您阅读所有章节。