【问题标题】:React to SignalR keep-alive ping对 SignalR 保持活动 ping 做出反应
【发布时间】:2014-06-11 19:35:58
【问题描述】:

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

我正在开发一个应用程序,该应用程序将为信号器客户端执行昂贵的查询。查询不会在与服务器连接的同一台机器上执行。查询运行起来很昂贵,而且很容易重新启动,因此工作的工作人员不想为断开连接的客户端或无法访问或关闭的服务器工作;他们希望确保客户仍然在那里。这可以通过简单地让客户端在某个时间间隔 ping Web 服务器来轻松完成,然后 Web 服务器可以将 ping 传递给 worker。

public class PingedHub : Hub
{
    private readonly IPingListener _listener;

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

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

SignalR already does this。为了检测丢失的连接,如果在GlobalHost.Configuration.KeepAlive 配置的时间段内没有其他流量传输,SignalR 会发送 Keep-Alive ping。如果它在更大的时间内没有收到任何流量,由GlobalHost.Configuration.ConnectionTimeout配置,它会断开客户端并引发OnDisconnected。

是否可以连接到现有系统以确保客户端已连接,或者客户端是否需要发送冗余 ping?

【问题讨论】:

    标签: signalr


    【解决方案1】:

    无需挂接到 SignalR 连接系统。 ping 不会是多余的;如果您的客户端发送 ping 的频率至少与 GlobalHost.Configuration.KeepAlive 一样,SignalR 将不会发送自己的 keep-alive ping。

    如果您确实找到了连接 SignalR 系统的方法,您将面临一个新问题。当有其他流量时,不会发送保持活动的 ping,但您的工作人员仍然想知道客户端还活着。如果通信通道由于其他原因而处于活动状态,则您必须在通过 ping 向工作人员发送垃圾邮件或设置一些中间系统来限制它们之间做出选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2017-11-08
      • 1970-01-01
      • 2023-03-08
      • 2019-12-30
      • 2020-05-18
      相关资源
      最近更新 更多