2014-09-01 104 views
9

我在SignalR中使用長輪詢。我發現用戶會話結束後(ASP.NET Session_End被調用)在基於singalr的網頁使/signar/ping請求(as shown in this screenshot)之後立即結束。我通過了http://www.asp.net/signalr/overview/signalr-20/hubs-api/handling-connection-lifetime-events,但無法弄清問題後的明確答案。當使用長輪詢時使用/ signalr/ping呼叫

  1. 如何使ASP.net用戶會話在信號客戶端網頁中保持活動狀態?
  2. /ping的實際用途是什麼?
  3. 這個/ ping調用的時間是可配置的嗎?

回答

13

/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 })//... 

默認pingInterval爲300000毫秒(5分鐘)。您可以通過將pingInterval設置爲空來禁用ping。

+0

感謝halter73,那正是我所尋找的。 – 2014-09-03 01:12:45

+0

@ halter73,你是說長時間輪詢會使ASP.NET會話保持活躍狀態​​,因此,如果發生的事情比ping時間更頻繁,那麼ping是不必要的? – Mark 2014-09-03 01:30:58

+2

@Mark Right。對於長輪詢而言,ping不應該是必需的,因爲該傳輸已經發送頻繁的請求,但SignalR仍然會發送ping請求。 – halter73 2014-09-03 01:33:48