silverlight - SignalR - NLB 服务器更改和建议的横向扩展方式

标签 silverlight signalr scaling nlb

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

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

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

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

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

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

最佳答案

看完这个信息量很大的video ,我找到了问题的答案。

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

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

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

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

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

关于silverlight - SignalR - NLB 服务器更改和建议的横向扩展方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38890165/

相关文章:

silverlight - "The DOM/scripting bridge is disabled"混合错误

silverlight - Facebook crossdomain.xml silverlight 错误

javascript - SignalR 聊天 : Differentiating ListItem sender and receiver for Css

c# - SignalR Core 如何每 n 秒向客户端发送消息

silverlight - Windows Phone - OnNavigatingFrom - 问题

c# - Silverlight中没有List的Find扩展方法?

c# - 如何在 SignalR hub 的 Unity IoC 容器中注入(inject)依赖项?

android - 如何在android中高质量且不崩溃地缩放位图

android - 理解 Android 元视口(viewport)缩放 : What am I missing?

image - 使用 libPng 解码时缩小图像