Signalr 对信号员的反应保持活跃

Signalr 对信号员的反应保持活跃,signalr,Signalr,SignalR服务器应用程序能否对SignalR内部使用的保持活动ping作出反应 我正在开发一个应用程序,它将为Signal客户端执行昂贵的查询。查询将不会在与服务器连接的机器相同的机器上执行。查询的运行成本很高,而且很容易重新启动,因此执行此工作的工作人员不希望为断开连接的客户端或无法访问或停机的服务器工作;他们希望确保客户仍然在那里。这可以通过简单地让客户机每隔一段时间ping web服务器来实现,然后web服务器可以将ping传递给工作者 public class PingedHub :

SignalR服务器应用程序能否对SignalR内部使用的保持活动ping作出反应

我正在开发一个应用程序,它将为Signal客户端执行昂贵的查询。查询将不会在与服务器连接的机器相同的机器上执行。查询的运行成本很高,而且很容易重新启动,因此执行此工作的工作人员不希望为断开连接的客户端或无法访问或停机的服务器工作;他们希望确保客户仍然在那里。这可以通过简单地让客户机每隔一段时间ping web服务器来实现,然后web服务器可以将ping传递给工作者

public class PingedHub : Hub
{
    private readonly IPingListener _listener;

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

    public Ping()
    {
        _listener.Ping(Context.ConnectionId);
    }
}
。为了检测丢失的连接,如果在
GlobalHost.Configuration.KeepAlive
配置的时间段内没有传输其他通信量,信号器将发送保持活动ping。如果它在更大的时间段内没有收到任何通信量(由
GlobalHost.Configuration.ConnectionTimeout
配置),它将断开客户端的连接并引发
OnDisconnected


是否可以连接到现有系统以获得客户端已连接的肯定保证,或者客户端是否需要发送冗余ping?

无需连接到信号机连接系统。ping不会是多余的;如果您的客户端发送ping的频率至少与
GlobalHost.Configuration.KeepAlive
相同,那么signer将不会发送自己的保持活动ping

如果你真的找到了连接信号系统的方法,你将面临一个新的问题。当存在其他流量时,不会发送保持活动的ping,但是您的工作人员仍然希望知道客户端是否仍然活动。如果通信通道由于其他原因处于活动状态,那么您必须在向工作人员发送垃圾邮件和ping之间做出选择,或者在适当的位置设置一些中间系统来限制它们