【问题标题】:SignalR long polling reconnection behaviorSignalR 长轮询重新连接行为
【发布时间】:2013-11-08 10:13:47
【问题描述】:

使用带有 JS 长轮询客户端的 SignalR 持久连接,我们看到在不同场景中的重新连接行为不一致。当客户端机器的网线被拔掉时,JS连接不会进入重新连接状态,它永远不会(至少5分钟后不会)达到断开状态。对于其他情况,例如重新启动 IIS Web 应用程序,长轮询 JS 连接确实会进入重新连接状态并成功重新连接。我知道这背后的原因是长轮询传输不支持保持活动状态。

我可以看到在 github 上提出了一个建议,以更好地支持长轮询传输 (https://github.com/SignalR/SignalR/issues/1781) 的重新连接,但似乎没有承诺更改它。

首先,在长轮询的情况下,是否有适当的解决方法来检测客户端上的断开连接。 其次,有没有人知道在描述的案例中是否有计划支持重新连接?

干杯

【问题讨论】:

    标签: asp.net signalr long-polling signalr.client


    【解决方案1】:

    我们已经讨论了不同的替代方案来支持长轮询的“点赞”功能;然而,由于轮询在幕后工作的时间长,在不影响绝大多数用户的情况下实施起来并不容易。在我们继续讨论“正确”解决方案时,我将为您提供一种解决方法来检测长轮询客户端中的网络故障(如果绝对需要)。

    创建一个服务器方法,我们称之为 ping:

    public class MyHub : Hub
    {
        public void Ping()
        {
        }
    }
    

    现在在客户端创建一个间隔,您将在其中“ping”服务器:

    var proxy = $.connection.myHub,
        intervalHandle;  
    ...
    $.connection.hub.disconnected(function() {
        clearInterval(intervalHandle);
    });  
    ...  
    $.connection.hub.start().done(function() {
        // Only when long polling
        if($.connection.hub.transport.name === "longPolling") {
            // Ping every 10s
            intervalHandle = setInterval(function() {
                // Ensure we're connected (don't want to be pinging in any other state).
                if($.connection.hub.state === $.signalR.connectionState.connected) {
                    proxy.server.ping().fail(function() {
                        // Failed to ping the server, we could either try one more time to ensure we can't reach the server
                        // or we could fail right here.
                        TryAndRestartConnection(); // Your method
                    });
                }
            }, 10000); 
        }
    });
    

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回答。检测客户端上的断开连接对于我们的应用程序正常工作是绝对必要的,所以我认为我们会像您建议的那样使用某种周期性 ping。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2012-10-11
    • 1970-01-01
    • 2014-01-22
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多