您网站上的多个signalR连接/集线器

如果我有多个页面可以使用多个集线器类,那么管理它的最佳方法是什么?

例如:

  • 导航到网站中的另一个页面并且基本上“重新打开”与上一页打开的同一个集线器类的连接是不是很糟糕?

  • 我是否认为在页面上打开多个集线器连接是正确的,因为它们都在一个连接中统一,即使它们是不同的集线器类?

您可以让多个集线器在您的站点上共享一个连接。 SignalR 2.0已更新,可通过一个signlar连接处理多个集线器,性能不会下降。

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

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

与在单个类中定义所有Hubfunction相比,多个Hub没有性能差异

要从Hub开始,请阅读Hub的WIKI条目和Hub的 客户端 。 根据多页的上下文,有几件事情。

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

例:

您有一个包含两个部分的页面,一个显示实时用户活动的图表和一个区域,用于查看用户作为表格执行的实时数据更改。 你会创建两个集线器或两个组或什么? 还有其他页面使用相同的图形和数据表。

我的解决方案

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

当您在页面之间切换时,客户端将连接到相同的集线器并请求getGraph或getDataTable或两者并使用相关数据填充其客户端。 同样在服务器上,当数据发生变化时,您可以调用客户端方法来更新所有客户端或其中的一 (允许添加此复杂性)

假设您有学生和老师查看您的申请。 它们需要不同级别的数据访问。 您可以使用群组在群集中将它们分开,这样您就不会向教师发送教师信息给学生和学生数据。

  1. 在集线器加入中,您可以添加它们以加入与其角色或任何差异化function关联的组。
  2. 当您发送给所有客户时,现在您可以发送给教师或学生的客户群。 没有为教师或学生创建另一个中心,他们都在同一个中心。

回到你的“不好”和“没问题”的问题,如果没有实际应用的背景,这很难建立。 我不能想到除了Performance之外你可以certificate多个集线器的合理性。