信号器中的OnDisconnected方法

时间:2014-01-19 07:49:21

标签: asp.net-mvc-4 signalr

我正在使用singalr库使用MVC 4开发实时通知网站。

我的网络应用程序将在多个Web服务器上运行,因此我需要使用数据库管理连接。

所有事情都没有问题,OnDisconnected方法并没有在所有网络浏览器中激活。

似乎与firefox一起工作正常,但是使用IE9以及所有移动浏览器都会触发它。

所以这是我的问题,我不会依赖这种方法,最终在我的数据库中有很多未使用的连接。此外,即使Ondisconnected方法有效,也会发现服务器可能会关闭,这些未使用的连接将保留在数据库中。

我在考虑一种后台方法,每1分钟运行一次,然后将db的连接与当前连接进行比较。

问题在于我不知道如何实现它,或者它是最好的方法。 有没有办法获得所有有效连接,以便我可以与db进行比较?

提前致谢

1 个答案:

答案 0 :(得分:4)

OnDisconnected方法应该始终为每个浏览器触发。但是, OnDisconnected方法触发可能会有所不同。

这是SignalR在触发OnDisconnected方法时经历的过程:

SignalR绑定到浏览器的unload事件,并尝试向服务器发送AJAX请求,以通知客户端正在离开(断开连接)。如果AJAX请求成功到达服务器,将立即触发OnDisconnected方法。如果由于网络状况或其他看不见的情况而导致AJAX请求无法到达服务器,那么OnDisconnected将不会触发ConnectionTimeout(配置)已经过去。

Soooo长话短说,OnDisconnected应始终最终为每个客户端和每个浏览器触发。如果不是,你绝对应该在GitHub上提出问题。

希望这有帮助!