【问题标题】:Use of /signalr/ping call when using long polling使用长轮询时使用 /signalr/ping 调用
【发布时间】:2014-09-01 00:19:05
【问题描述】:

我正在对 SignalR 使用长轮询。我发现在基于 singalr 的网页发出 /signar/ping 请求 (as shown in this screenshot) 之后,用户会话结束(正在调用 ASP.NET Session_End)。我浏览了http://www.asp.net/signalr/overview/signalr-20/hubs-api/handling-connection-lifetime-events,但无法找出以下问题的明确答案。

  1. 如何通过信号器客户端网页保持 ASP.net 用户会话处于活动状态?
  2. /ping 的实际用途是什么?
  3. 此 /ping 调用的时间是否可配置?

【问题讨论】:

    标签: asp.net signalr signalr.client


    【解决方案1】:

    /signalr/ping 请求的全部目的是保持 ASP.NET 会话处于活动状态。通过以比会话超时时间更短的定期间隔发出请求,会话不应过期,因为服务器应重置每个请求的超时时间。

    在长轮询传输的情况下,这可能是不必要的,因为在默认配置下,SignalR 至少每 110 秒强制进行一次新的长轮询。即便如此,无论使用何种传输方式,SignalR 都会默认每 5 分钟发出一次 ping 请求。这 5 分钟的时间间隔足够小,可以处理 ASP.NET 的默认 20 分钟会话超时。

    您可以在致电$.connection.hub.start 时将 5 分钟 ping 间隔更改为自定义值,如下所示:

    // Configure SignalR to ping the server every minute
    $.connection.hub.start({ pingInterval: 60000 })//...
    

    默认的pingInterval 是 300000 毫秒(5 分钟)。您可以通过将 pingInterval 设置为 null 来禁用 ping。

    【讨论】:

    • 感谢halter73,这正是我想要的。
    • @halter73,你是说长轮询将使 ASP.NET 会话保持活动状态,因此,如果它比 ping 时间更频繁地发生,那么 ping 是不必要的?
    • @Mark Right。长轮询不需要 ping,因为该传输已经发送频繁的请求,但 SignalR 无论如何都会发送 ping 请求。
    • @halter73 我的 ASP.Net 会话是 24 小时,所以建议将 ping 间隔设置为 null 吗?
    猜你喜欢
    • 2013-05-30
    • 2013-07-16
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2013-07-12
    • 1970-01-01
    • 2014-07-21
    相关资源
    最近更新 更多