我正在使用singalr库使用MVC 4开发实时通知网站。
我的网络应用程序将在多个Web服务器上运行,因此我需要使用数据库管理连接。
所有事情都没有问题,OnDisconnected方法并没有在所有网络浏览器中激活。
似乎与firefox一起工作正常,但是使用IE9以及所有移动浏览器都会触发它。
所以这是我的问题,我不会依赖这种方法,最终在我的数据库中有很多未使用的连接。此外,即使Ondisconnected方法有效,也会发现服务器可能会关闭,这些未使用的连接将保留在数据库中。
我在考虑一种后台方法,每1分钟运行一次,然后将db的连接与当前连接进行比较。
问题在于我不知道如何实现它,或者它是最好的方法。 有没有办法获得所有有效连接,以便我可以与db进行比较?
提前致谢
答案 0 :(得分:4)
OnDisconnected
方法应该始终为每个浏览器触发。但是, 时OnDisconnected
方法触发可能会有所不同。
这是SignalR在触发OnDisconnected
方法时经历的过程:
SignalR绑定到浏览器的unload事件,并尝试向服务器发送AJAX请求,以通知客户端正在离开(断开连接)。如果AJAX请求成功到达服务器,将立即触发OnDisconnected
方法。如果由于网络状况或其他看不见的情况而导致AJAX请求无法到达服务器,那么OnDisconnected
将不会触发ConnectionTimeout
(配置)已经过去。
Soooo长话短说,OnDisconnected
应始终最终为每个客户端和每个浏览器触发。如果不是,你绝对应该在GitHub上提出问题。
希望这有帮助!