2012-08-01 83 views
13

如果我有多个可以使用多个集线器类的页面,那么管理这个类别的最佳方法是什么?您网站上的多个signalR连接/集线器

- 导航到网站中的另一个页面,实质上是“重新打开”与前一页上打开的同一个集线器类的连接是不是很糟糕?

- 页面上的多个集线器连接是可以的,因为它们全都统一在一个连接中,即使它们是不同的集线器类别?

回答

8

要开始与集线器阅读WIKI entry for HubsClient Side of Hubs。根据多个页面的上下文有几件事。

  1. 当您启动集线器它给你的客户端,保持该集线器(有人可以用例确认)在多个页面相同的ID。
  2. 重新打开连接到同一个集线器并不坏。您可能在所有页面上运行hub.start客户端方法,但是如果其一个客户端打开多个窗口或从一个页面转到另一个页面,则该集线器上将具有相同的连接ID,因此您可以保持联系。如果是多个集线器,则必须管理集线器以及连接ID。所以这个问题就像是“让多个ISP为不同网站提供互联网连接是不好的”。你可以拥有它们,但它是一种矫枉过正。一个ISP可以为你服务所有的页面。
  3. 单个页面上的多个集线器并不理想,但它可以工作。同样,答案需要一些问题的上下文,但总的来说,您可以通过组或使用其他基于参数的方法区分同一连接ID上的各种请求。在同一页面上使用两个集线器可能需要更多的资源(需要测试此),而不是使用参数或组来分隔消息的不同区域。

例子:

你有一个页面,有两个部分,这显示实时用户活动和一个区域来查看用户做一个表的实时数据变化的曲线图。你会创建两个中心还是两个组或什么?还有其他页面使用相同的图形和数据表。

我的解决方案:

  1. 我将创建应用程序从服务器收到实时数据的单一中心。
  2. 我将在服务器上创建不同的方法来发送图形点和数据表。
  3. 我将在所有使用这些图表与同一集线器上的服务器方法进行通信的页面上创建客户端方法。

当您在页面之间切换时,客户端将连接到同一个集线器并请求getGraph或getDataTable或两者并使用相关数据填充其客户端。同样在服务器数据改变时,你可以调用客户端的方法来更新所有客户端或组他们的(让我们添加了这种复杂性)

假设你有学生和老师在看你的应用程序。他们需要不同级别的数据访问。您可以使用群组将其保留在中心上,以便您不将教师信息发送给学生和学生数据给教师。

  1. 在您的集线器连接上,您可以添加它们以加入与其角色或任何区分功能关联的组。
  2. 当你发送给所有的客户,现在你可以发送给老师或学生的客户群。不为教师或学生创造另一个中心,他们都在同一个中心。

回到“不好”和“可以”的问题,这是很难建立的,没有实际应用的背景。我不能想到一个场景,除了Performance,你可以证明多个枢纽。

+0

该应用程序针对不同类型的数据具有不同的集线器。我们的应用程序非常庞大,这是一个关注的逻辑分离。一些前端客户端只需要一部分实时数据,并且有一个他们可以连接的集线器,而不是管理组是有意义的。 – 2015-10-30 18:32:35

+0

正如@sam在回答中所建议的那样,您可以这样做,并在此处进行解释http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs – 2015-11-09 16:56:42

+0

I我意识到,这就是我设置我的应用程序的方式。我只是评论,因为你说你不能想到一个场景,你可以证明多个枢纽 – 2015-11-09 21:06:21

18

您可以让多个集线器在您的站点上共享一个连接。 SignalR 2.0已更新,可通过一个信号连接处理多个集线器,而不会出现性能损失。

官方文档:http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#multiplehubs

所有客户端将使用相同的URL建立与您的服务(“/ signalr”或您的自定义URL,如果你指定一个)一个SignalR连接,该连接用于所有由服务定义的集线器。

与多个集线器中的所有Hub功能定义相比,没有性能差异

相关问题