使用长轮询时使用/ signalr/ping调用

Raj*_*nda 10 asp.net signalr signalr.client

我正在使用SignalR进行长轮询.我发现用户会话在基于singalr的网页发出/ signar/ping请求后立即结束(正在调用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呼叫的时间是否可配置?

hal*_*r73 18

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

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

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

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

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

  • @Mark对.长轮询不应该进行ping操作,因为该传输已经发送了频繁的请求,但SignalR仍然会发送ping请求. (2认同)