【问题标题】:Is it possible to catch signalR connection disconnect event? Error: Connection disconnected with error webSocket closed with status code: 1006是否可以捕获 signalR 连接断开事件?错误:连接断开,错误 webSocket 关闭,状态码:1006
【发布时间】:2019-04-09 10:32:25
【问题描述】:

我正在使用 signalR v.1.1.2 https://github.com/aspnet/SignalR#readme(是的,已经过时了) 我已经成功初始化并启动了 signalR 连接。 几分钟后,连接断开,我在控制台中记录了这个烦人的犹豫错误,由 signalR 的内部库触发。

Error: Connection disconnected with error 'Error: WebSocket closed with status code: 1006 ()'

我的目标是通过适当的事件侦听器捕获此错误并立即重新连接或通过重试连接模式弹出窗口通知用户。我只是无法捕捉信号器关闭事件。我错过了什么吗?

我非常绝望,我写了大约 20 种方法来解决这个问题,但没有一个对我有用。我确信这些方法绑定到我设置和运行的连接实体。顺便说一句,关于连接生命周期的 signalR 文档页面,也不适用于我 https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/handling-connection-lifetime-events#how-to-notify-the-user-about-disconnections

欢迎任何帮助或建议。 提前致谢。

这些都不起作用:

  console.log("disconnected inline cb")
})

connection.connectionSlow((resp) => {
  console.log("connectionSlow inline cb")
})

connection.onclose((resp) => {
  console.log("onclose inline cb")
})

connection.close((resp) => {
  console.log("close inline cb")
})

connection.on('Disconnected', (resp) => {
  console.log("camelCase Disconnected inline cb")
})

connection.on('ConnectionSlow', (resp) => {
  console.log("camelCase ConnectionSlow inline cb")
})

connection.on('OnClose', (resp) => {
  console.log("camelCase OnClose inline cb")
})

connection.on('Close', (resp) => {
  console.log("camelCase Close inline cb")
})

connection.on('disconnected', (resp) => {
  console.log("lowercase Disconnected inline cb")
})

connection.on('connectionSlow', (resp) => {
  console.log("lowercase ConnectionSlow inline cb")
})

connection.on('connectionslow', (resp) => {
  console.log("lowercase 2 Connectionslow inline cb")
})

connection.on('close', (resp) => {
  console.log("lowercase close inline cb")
})

connection.on('onClose', (resp) => {
  console.log("lowercase OnClose inline cb")
})

connection.on('onclose', (resp) => {
  console.log("lowercase 2 Onclose inline cb")
})

connection.connection.disconnected((resp) => {
  console.log("connection.connection disconnected inline cb")
})

connection.connection.onclose((resp) => {
  console.log("connection.connection onclose inline cb")
})

connection.connection.connectionSlow((resp) => {
  console.log("connection.connection connectionSlow inline cb")
})

connection.connection.close((resp) => {
  console.log("connection.connection close inline cb")
})

connection.connection.on('close', (resp) => {
  console.log("connection.connection lowercase close cb")
})

connection.connection.on('Close', (resp) => {
  console.log("connection.connection camelcase close cb")
})

connection.connection.on('disconnected', (resp) => {
  console.log("connection.connection disconnected inline cb")
})

connection.connection.on('onclose', (resp) => {
  console.log("connection.connection onclose inline cb")
})

connection.connection.on('onClose', (resp) => {
  console.log("connection.connection lowercase onclose inline cb")
})

connection.connection.on('connectionSlow', (resp) => {
  console.log("connection.connection lowercase connectionSlow inline cb")
})
connection.connection.on('connectionslow', (resp) => {
  console.log("connection.connection lowercase2 connectionSlow inline cb")
})

connection.connection.on('Disconnected', (resp) => {
  console.log("connection.connection camelCase disconnected inline cb")
})

connection.connection.on('OnClose', (resp) => {
  console.log("connection.connection camelCase onclose inline cb")
})

connection.connection.on('ConnectionSlow', (resp) => {
  console.log("connection.connection camelCase connectionSlow inline cb")
})```

【问题讨论】:

    标签: websocket signalr


    【解决方案1】:

    几个小时后,我们解决了我们的问题。
    我们所做的是使用文档中的 .on 语法来绑定“关闭、断开...”事件。

    然而,对我们有用的是明确声明 .onclose 事件绑定到 connectionHub 的连接对象,所以通过signalR内部http连接库,这个函数在错误时成功触发。

    connection.connection.onclose = (error) => {
      console.log(error)
    }
    

    【讨论】:

      【解决方案2】:

      强烈建议您至少升级到 v2.x。这可能是为什么较新的文档对您没有帮助的部分原因。

      你可以看到我的回答here on SO

      基本上这会让你捕捉到一个断开连接事件,如果你愿意的话会弹出一个模式(你必须编写代码),然后在 5 秒后重新连接。

      【讨论】:

      • 谢谢@frank-m,但由于一些限制,我无法将库更新到 v.2 atm
      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2019-05-10
      • 2014-05-03
      相关资源
      最近更新 更多