【发布时间】: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