SignalR 服务器应用程序能否对 SignalR 内部使用的保持事件 ping 使用react?

我正在开发一个应用程序,它将为信号客户端执行昂贵的查询。查询不会在与服务器连接的同一台机器上执行。查询运行起来很昂贵,而且很容易重新启动,因此工作人员不想为断开连接的客户端或无法访问或停机的服务器工作;他们想要保证客户还在那里。这可以通过简单地让客户端在某个时间间隔 ping 网络服务器来轻松完成,然后网络服务器可以将 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 。为了检测丢失的连接,如果在 GlobalHost.Configuration.KeepAlive 配置的时间段内没有其他流量传输,SignalR 会发送一个 Keep-Alive ping。如果它在更长的时间内没有收到任何流量,由 GlobalHost.Configuration.ConnectionTimeout 配置,它会断开客户端并引发 OnDisconnected

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

最佳答案

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

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

关于signalr - 对 SignalR 保持事件 ping 使用react,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24171179/

10-14 15:41