SignalR服务器应用程序能对SignalR内部使用的保持存活的ping做出反应吗?
我正在开发一个应用程序,它将为signalr客户端执行昂贵的查询。查询将不会在与服务器连接的同一台计算机上执行。这些查询运行起来很昂贵,而且很容易重新启动,因此执行该工作的工作人员不希望为断开连接的客户端或不可访问的或向下的服务器进行工作;他们希望确保客户机仍然在那里。这可以通过简单地让客户端在某个时间间隔内平web服务器来实现,然后web服务器可以将ping传递给工作人员。
public class PingedHub : Hub
{
private readonly IPingListener _listener;
public Hub(IPingListener listener)
{
_listener = listener;
}
public Ping()
{
_listener.Ping(Context.ConnectionId);
}
}
SignalR已经这么做了。为了检测丢失的连接,如果在一段时间内没有传输其他通信量,则SignalR发送一个保持活动的ping,由GlobalHost.Configuration.KeepAlive
配置。如果它在较长的时间内没有接收到任何由GlobalHost.Configuration.ConnectionTimeout
配置的通信量,它会断开客户端的连接并引发OnDisconnected
。
是否有可能连接到现有系统以获得客户端已连接的积极保证,或者客户端是否需要发送冗余的ping?
发布于 2014-06-11 11:54:50
没有必要连接到SignalR连接系统。pings不会是多余的;如果您的客户端发送pings的次数至少和GlobalHost.Configuration.KeepAlive
一样多,那么SignalR就不会发送它自己的保持存活的pings。
如果您确实找到了一种连接到SignalR系统的方法,您将面临一个新的问题。当有其他流量时,就不会发送“保持活着”的请求,但是您的工作人员仍然想知道客户仍然活着。如果通信通道由于其他原因而处于活动状态,那么您必须选择使用pings发送垃圾邮件给工作人员,还是设置一些中间系统来控制它们。
https://stackoverflow.com/questions/24171179
复制