【问题标题】:signalR core open connection twicesignalR核心打开连接两次
【发布时间】:2018-07-01 02:50:14
【问题描述】:

是否允许创建到同一个集线器的两个连接?还是应该使用相同的 Hub 连接?

var cnn1 = new signalR.HubConnection("/hub1");
cnn1.on("Method1", function(){});
cnn1.start().then(function() {cnn1.invoke("Something1");});

var cnn2 = new signalR.HubConnection("/hub1");
cnn2.on("Method2", function(){});
cnn2.start().then(function() {cnn2.invoke("Something2");});

【问题讨论】:

  • 你应该使用相同的连接

标签: asp.net-core signalr asp.net-core-signalr


【解决方案1】:

您完全可以创建 2 个 HubConnection 实例。在这个简单的示例中,没有理由这样做,但我确信在某些情况下您会想要这样做。

旁注,您知道连接可以注册多个.on() 方法吗? cnn1.on("Method1", function(){}); cnn1.on("Method2", function(){});

【讨论】:

  • 是的,这个示例很简单,只是为了 StackOverflow 的目的。然而,在我的应用程序中,cnn1 位于一个全局 js 文件中,该文件为每个资源加载,而 cnn2 位于另一个脚本中,该脚本仅为特定资源加载。这就是为什么我问它是否可以,或者我是否应该重用相同的连接/创建第二个集线器。因为它仍然是 alpha 版本,所以周围没有太多文档。
  • 就像我说的,这两种方法都可以。拥有 2 个连接可能会在客户端上分配更多资源,但可能会有更多吞吐量。不过,您必须对其进行测量。
【解决方案2】:

SignalR 2.0:多个集线器可以共享一个连接

是的,您可以这样做。但请注意服务器(IIS 和浏览器)的限制

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

您可以在以下问题中找到此答案: Multiple signalR connections/hubs on your website

SignalR Core:不支持每个连接拥有多个集线器

新版 SignalR 不支持 每个连接有多个集线器。这导致了一个简化的 客户端 API,并使其更容易应用身份验证策略和 其他中间件到集线器的连接。除了订阅集线器 不再需要连接开始之前的方法。

阅读有关信号器核心的更多信息: https://blogs.msdn.microsoft.com/webdev/2017/09/14/announcing-signalr-for-asp-net-core-2-0/

备注:

一旦我开始使用 Signalr 2.0 的应用程序,我还计划使用多个连接。但是由于浏览器的限制,我有一些奇怪的效果。浏览器确实限制了并行连接的数量。也许这不是您在同一个浏览器上打开多个浏览器实例的用例,但您应该知道这是背景。 如果您打开 10 个相同浏览器类型的实例,您可以对此进行测试。然后您可以看到并非所有实例都会创建连接。

【讨论】:

  • 感谢您的评论。您的评论对 signalR 2.0 有效,但它是否也适用于 signalR 核心?
  • 嗯,这有点令人困惑。据我了解,每个连接不可能有多个集线器。我有两个用于同一个集线器的连接。还是我错了?
  • 好的,我明白了。对不起。但是你用它做什么呢?
  • 在布伦南的答案上查看我的 cmets
猜你喜欢
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2019-08-18
相关资源
最近更新 更多