我试图将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。
答案 0 :(得分:1)
我认为您应该在服务器上添加持久性数据存储,并让服务器管理客户端为OnDisconnected
事件未被触发的客户端超时。
尝试以下示例:
https://github.com/DamianEdwards/NDCLondon2013/tree/master/UserPresence
并查看此帖子SignalR OnDisconnected - a reliable way to handle "User is Online" for chatroom?