如何在网页上保持SignalR连接存活?

时间:2018-02-12 15:11:09

标签: javascript asp.net asp.net-mvc signalr

我正在使用ASP.NET MVC 5并使用SignalR v2.2.2(最新版本)。我的应用程序工作正常,直到页面空闲了一段时间(不确定现在很长,但空闲时间在5到15分钟之间)。一旦它闲置了这段时间,网页上的按钮就不再有效了(因为我认为它们需要一个有效的连接)。

我解决此问题的首选方法是能够增加连接的超时。我怎么能这样做?

如果无法做到这一点,如何检测到页面上的连接已被删除和/或如何在需要时重新建立连接?

我的网页使用javascript,建立与SignalR集线器连接的代码是:

$.connection.hub.start()
    .done(function () {
        // Does stuff here...
    })
    .fail(function (e) { console.log(e); });

谢谢

3 个答案:

答案 0 :(得分:1)

您可以实施2个食谱:

1.如果连接断开,请重新连接:

import * as interact from 'interactjs';

2.使用$.connection.hub.disconnected(function () { setTimeout(function () { $.connection.hub.start(); }, 5000); }); ,以便您尝试保持连接活动:

pingInterval

答案 1 :(得分:0)

来自Microsoft Docs

  

处理 connectionSlow 事件,一旦SignalR知道连接问题,就会在进入重新连接模式之前显示一条消息。

     

处理重新连接事件,以便在SignalR知道断开连接并进入重新连接模式时显示消息。

     

处理已断开连接的事件,以便在尝试重新连接超时时显示消息。在这种情况下,再次与服务器重新建立连接的唯一方法是通过调用Start方法重新启动SignalR连接,这将创建一个新的连接ID。

答案 2 :(得分:0)

现在有一个更简单的方法: .withAutomaticReconnect()

this post