[英]How to use SignalR events to keep connection alive in the right way?
我正在使用 SignalR、ASP.NET 和 C# 開發實時客戶端-服務器應用程序。 我使用 localhost 作為主機和 VS2013。
我的問題是:
為什么如果我關閉服務器,在網絡客戶端上會發生“重新連接”事件?
“斷開連接”事件僅在40 秒以上發生。 如何減少這個時間?
我需要客戶端在啟動時連接到服務器。 “重新連接”事件應僅在固定時間間隔內發生。 如果“重新連接”間隔時間結束,客戶端應作為新客戶端連接。 如何存檔這個目標?
最后,我想問 - 如何以正確的方式使用SignalR保持活動連接?
我正在使用此代碼:
C#
public override Task OnDisconnected()
{
clientList.RemoveAt(nIndex);
Console.WriteLine("Disconnected {0}\n", Context.ConnectionId);
return (base.OnDisconnected());
}
public override Task OnReconnected()
{
Console.WriteLine("Reconnected {0}\n", Context.ConnectionId);
return (base.OnReconnected());
}
Javascript
$.connection.hub.reconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();
// Add the message to the page.
$('#discussion').append('Reconnected to server: ' + now + '</br>');
});
$.connection.hub.disconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();
// Add the message to the page.
$('#discussion').append('Disconnected from server: ' + now + '</br>');
});
連接輸出后:
message received from server : Fri Feb 21 2014 10:53:02
關閉服務器輸出后:
Reconnected to server: Fri Feb 21 2014 10:53:22 <-- Why, if i close server ???
Disconnected from server: Fri Feb 21 2014 10:53:53 <-- Why 40+ seconds after the server is closed ?
1.關閉服務器后,在 Web 客戶端上,“重新連接”事件發生,而“斷開連接”事件僅在此之后發生。 為什么?
SignalR 無法區分關閉服務器和重新啟動服務器之間的區別。 因此,當服務器關閉時,客戶端將開始嘗試重新連接,以防服務器實際重新啟動。
2. 在未知的“重新連接”之后30 秒以上發生“斷開連接”。 如何減少這個時間?
這個 30 秒超時可以通過DisconnectTimeout 屬性修改。
3. 我需要客戶端在啟動時連接到服務器。 “重新連接”應僅在固定時間間隔內發生。 如果“重新連接”間隔時間結束,客戶端應作為新客戶端連接。
您應該在斷開連接的事件上啟動連接,最好在超時后啟動連接,以減少服務器重新啟動時的負載。
$.connection.hub.disconnected(function() {
setTimeout(function() {
$.connection.hub.start();
}, 5000); // Re-start connection after 5 seconds
});
SignalR文章中的整個理解和處理連接生命周期事件可能與您的問題有關。
此方法適用於不想更改服務器配置的情況; javascript 示例代碼:
connection.serverTimeoutInMilliseconds = 1000 * 60 * 10; // for 10 minute
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.