SignalR客户端断开连接不会始终触发

我正在尝试将SignalR版本1.2.1与Mono 2.10一起使用(在我现有的项目中) . 基本上它很棒 . 但是当进入连接和断开连接时,计数永远不会匹配 . 我正在尝试跟踪连接的客户端并相应地更新客户端 . 这是我的用例,

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

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

谁可以帮我这个事?如何检测客户端断开连接并停止计时器?提前致谢 .

PS:由于.NET framework 4.0的要求,我必须坚持使用Signal 1.2.1 . 即,我无法更新到4.5 .

回答(1)

2 years ago

我认为您应该在服务器上添加持久性数据存储,并让服务器管理客户端超时的客户端 OnDisconnected 事件未被触发 .

尝试以下示例:

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

看看这个帖子SignalR OnDisconnected - a reliable way to handle "User is Online" for chatroom?