【问题标题】:Destroying connection when $destroy in SignalRSignalR 中 $destroy 时破坏连接
【发布时间】:2017-01-30 23:13:29
【问题描述】:

我有一个运行 SignalR、Angular 和 Typescript 的页面。当当前的$scope 被破坏(如页面更改)时,我尝试断开客户端与 SignalR 服务器的连接:

Controller.ts

$scope.$on("$destroy", () => Service.Disconnect());

我的前端服务就有这个功能:

Service.ts

public Disconnect() {
    this.hub.disconnect();
}

因此,当我更改页面时,客户端会断开与集线器的连接。正如我在控制台中看到的那样,这非常有效:

SignalR:停止连接。

SignalR:关闭 Websocket。

SignalR: 触发 ajax abort async = true。

SignalR:停止对 keep alive 的监控。

完美运行。但是,当我随后加载新状态并再次设置连接时,旧连接会以某种方式“保留”,因为它会尝试连接两次。如果我然后转到另一个页面并再次返回,它会尝试连接 3 次。

编辑

似乎stateChanged 被多次调用。多次是调用连接设置的次数。嗯,当我断开客户端与集线器的连接时,我想知道为什么会这样。用我第一次连接时设置的一个简单的if already connected 变量修复了它,但它不是很好。

是否有适当的方法断开客户端?服务器/后端集线器是否也应该处理断开连接?当$scope 被销毁时,除了断开客户端与集线器的连接外,我还应该做什么?

【问题讨论】:

  • 你找到合适的断开集线器了吗?我在带有信号器的 Ionic 2 中面临同样的问题
  • 您找到解决此问题的方法了吗?我遇到了完全相同的问题。

标签: angularjs typescript signalr


【解决方案1】:

为什么你不使用 this.hub.stop();

【讨论】:

  • hub.stop is not a function 是我得到的。我没有打电话给this.hub.disconnect(),而是打电话给this.hub.stop()
  • 使用 this.hub.stop() 它正在运行吗?
  • 是的,集线器正在运行。 hub 不包含名为 stop 的方法。它包含这些:i.imgur.com/k2NC8eK.png(其中大部分是我注册的函数)。
  • 你能显示你的来源吗?您没有使用生成的代理?
  • 好吧,我正在使用角度包装器来创建集线器。 github.com/JustMaier/angular-signalr-hub - 基本上把它变成了 Typescript,但实际上是一样的。我的this.hub 是该包装器var hub = new Hub('employee', { 的集线器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多