一个SignalR服务器应用程序能够对内部使用的保持活动ping做出反应吗?
我正在开发一个应用程序,为SignalR客户端执行昂贵的查询。这些查询将不会在与服务器连接的同一台机器上执行。这些查询很耗时,但易于重新启动。因此,执行工作的工作者不想为已断开连接的客户端或无法到达或宕机的服务器执行工作;他们希望确保客户端仍然存在。这可以通过简单地让客户端在一定间隔内向Web服务器发送ping来轻松实现,然后Web服务器可以将ping传递给工作者。
我正在开发一个应用程序,为SignalR客户端执行昂贵的查询。这些查询将不会在与服务器连接的同一台机器上执行。这些查询很耗时,但易于重新启动。因此,执行工作的工作者不想为已断开连接的客户端或无法到达或宕机的服务器执行工作;他们希望确保客户端仍然存在。这可以通过简单地让客户端在一定间隔内向Web服务器发送ping来轻松实现,然后Web服务器可以将ping传递给工作者。
public class PingedHub : Hub
{
private readonly IPingListener _listener;
public Hub(IPingListener listener)
{
_listener = listener;
}
public Ping()
{
_listener.Ping(Context.ConnectionId);
}
}
SignalR已经实现了这一点。为了检测失去连接的情况,SignalR会在一段时间内没有其它通信时发送Keep-Alive ping,该时间段由GlobalHost.Configuration.KeepAlive
配置。如果在更长的时间段内没有任何通信,由GlobalHost.Configuration.ConnectionTimeout
配置,则会断开客户端的连接并触发OnDisconnected
事件。
是否可以通过现有系统来确保客户端已连接,或者客户端需要发送冗余ping?