一个背板上的多个SignalR集线器类型 - 优点/缺点/可扩展性?

时间:2016-02-04 16:56:39

标签: c# asp.net signalr signalr-backplane

最近,我们尝试使用SQL背板更改几个Web应用上的SignalR,以便在Web场中工作。

当我探索它的工作方式(朝向大多数可扩展性,最少失败点)的目标时,我们可以调整它的不同方式的数量正在增加。

目前,每个应用程序都使用SignalR来支持数据库中记录的轮询驱动的广播变化。

关于在所有应用上为所有SignalR实例使用一个背板的基本假设/观察:

  1. 所有具有一个公共背板的集线器和集线器实例(所有类型)都只在一条消息总线上。

  2. 所有中心实例基本上都是"合并"他们的客户端池。中心实例实际上无法知道他们拥有多少客户端。

  3. 可以在AppA的跟踪输出中看到来自某些AppB_Hub的消息流量。我假设如果AppA有一个名称相同的中心,他们就会发生冲突 - 或者只要他们意识到他们正在共享客户端,就可能没有。

  4. 问题/关切/未知数:

    1. 不同的集线器(不同的集线器类型,可能是不同的组件)可以很好地发挥作用吗?即消息&一个人的呼叫会干扰另一个?在什么情况下?
    2. 这一切都基于命名吗?即如果AppAHub和AppBHub想要很好地发挥,他们需要确保他们的方法& calback的名字有什么不同?或者只要集线器名称不同,它们是否已经不同了?
    3. 假设它足够安全",它是否"向外扩展"好,让每个应用程序筛选彼此的应用程序的消息。在某种程度上有一个单独的背板是否值得。是否值得小规模?例如:2种类型的轮毂,每种轮毂2个。
    4. 或者,AppAHub和AppBHub可能只是两个接口进入同一个集线器,因此AppA可能会随时了解AppB&反之亦然。如果我们知道他们都会被送到一切,我想知道他们中是否有任何一点是独立的枢纽。或者这会为AppA激活一些不可避免的额外成本,因为它更明确地关注"关心"关于AppB消息?

1 个答案:

答案 0 :(得分:0)

Hub是独立的,因此不同的集线器可以很好地运行,如果将它们放在不同的程序集中并希望相互访问,请参阅here

名称和回调基于客户端连接到哪个集线器,如果客户端连接到一个或多个不同的集线器(如果每个客户端仅连接到一个集线器),则它们应该是唯一的用于调试目的

对于性能计数器,请参阅here,Microsoft在其天蓝色Web服务中使用signlR背板,因此它确实可以扩展,但基准数据上没有发布白皮书

如果你想使用接口方法IAppAHub和IAppBHub你的java脚本客户端可以调用IAppAHub和IAppBHub方法,如果你想限制你可以通过角色来调用它,你应该调查一下SignalR securty