2014-06-11 13 views
3

SignalR服務器應用程序可以對SignalR內部使用的保持活躍狀態​​做出反應嗎?對SignalR保持活動狀態的響應

我正在研究一個將執行信號客戶端的昂貴查詢的應用程序。查詢將不會在與服務器連接的計算機相同的機器上執行。這些查詢運行起來非常昂貴,並且易於重新啓動,因此執行此項工作的工作人員不希望爲斷開連接的客戶端或無法訪問或斷開的服務器工作。他們希望保證客戶仍然在那裏。這可以通過簡單地讓客戶端以某個時間間隔ping Web服務器來完成,Web服務器然後可以將ping傳遞給工作人員。

public class PingedHub : Hub 
{ 
    private readonly IPingListener _listener; 

    public Hub(IPingListener listener) 
    { 
     _listener = listener; 
    } 

    public Ping() 
    { 
     _listener.Ping(Context.ConnectionId); 
    } 
} 

SignalR already does this。爲了檢測丟失的連接,如果在一段時間內沒有其他流量傳輸,SignalR會發送Keep-Alive ping,由GlobalHost.Configuration.KeepAlive配置。如果在較大的時間段內沒有收到任何流量(由GlobalHost.Configuration.ConnectionTimeout配置),則會斷開客戶端連接並提升OnDisconnected

是否有可能掛鉤到現有系統以獲得客戶端連接的正確保證,或客戶端是否需要發送冗餘ping?

回答

5

有沒有必要掛鉤到SignalR連接系統。 ping不會是多餘的;如果您的客戶至少發送ping的次數至少是GlobalHost.Configuration.KeepAlive,那麼SignalR將不會發送自己的保活ping。

如果您確實找到了連接到SignalR系統的方法,您將面臨一個新問題。當有其他流量時,保持活躍的ping不會被髮送,但您的員工仍然想知道客戶仍然活着。如果溝通渠道因某種其他原因而處於活動狀態,則必須選擇是通過ping工作人員發送垃圾郵件還是使用一些中間系統來限制他們。

相關問題