SignalR客户端断开并不总是触发

本文关键字:客户端 断开 SignalR | 更新日期: 2023-09-27 18:09:01

我正在尝试使用Mono 2.10 SignalR 1.2.1版本(在我现有的项目中)。基本上效果很好。但是当谈到连接和断开连接时,计数永远不会匹配。我正试图跟踪连接的客户端并相应地更新客户端。这是我的用例,

我有三个帧加载三个不同的页面。顶部(用于实时更新),左树(用于页面导航)和右页(实际内容页)。首页将永远保留,并将不断更新实时值(我需要连接到这里的集线器)。同样在一个内容页面(说页面A),我需要连接到SignalR和SignalR应该不断更新一些实时信息,直到我连接在这个页面A.我正在考虑启动一个定时器在集线器当用户导航到这个页面,并继续将数据推送到连接的客户端。一旦用户导航出页面A(或关闭浏览器),我应该停止计时器。也有机会像多个用户连接到页面A,因此我应该确保在停止计时器之前页面A中当前没有客户端。

为了测试这一点,我只是有一个静态变量来增加和减少计数器,当用户从页面a连接/断开连接时,我在枢纽的OnConnected和Ondisconnected事件中这样做。问题是,我总是得到OnConnected事件。但我不会一直得到OnDisconnected事件。我尝试过各种场景,如导航到我的网站内的其他页面,再次重新加载相同的页面A,关闭选项卡/窗口等,但我面临的问题大部分时间在页面导航。它不总是调用断开连接,我的计数器再也不会降为零。我试着设置超时,但这似乎也不叫断开。

有谁能帮我一下吗?如何检测客户端断开并停止定时器?提前谢谢。

PS:由于。net框架4.0的要求,我不得不坚持使用Signal 1.2.1。也就是说,我不能更新到4.5。

SignalR客户端断开并不总是触发

我认为你应该在服务器上添加一个持久的数据存储,让服务器管理客户端,客户端是OnDisconnected事件没有触发的超时

试试下面的例子:

https://github.com/DamianEdwards/NDCLondon2013/tree/master/UserPresence

,看看这个线程SignalR OnDisconnected -处理"User is Online"的可靠方法。聊天室吗?