繁体   English   中英

如何使用 SignalR 事件以正确的方式保持连接活动?

[英]How to use SignalR events to keep connection alive in the right way?

我正在使用 SignalR、ASP.NET 和 C# 开发实时客户端-服务器应用程序。 我使用 localhost 作为主机和 VS2013。

我的问题是:

  1. 为什么如果我关闭服务器,在网络客户端上会发生“重新连接”事件?

  2. “断开连接”事件仅在40 秒以上发生。 如何减少这个时间?

  3. 我需要客户端在启动时连接到服务器。 “重新连接”事件应仅在固定时间间隔内发生。 如果“重新连接”间隔时间结束,客户端应作为新客户端连接。 如何存档这个目标?

最后,我想问 - 如何以正确的方式使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM