asp.net-mvc – signalR跟踪连接用户
我需要检查特定用户是否仍然连接.
我有以下用于跟踪用户的HashSet: public static class UserHandler { public static HashSet<string> ConnectedIds = new HashSet<string>(); } 因此断开连接: public override Task OnDisconnected() { UserHandler.ConnectedIds.Remove(this.Context.ConnectionId); if (UserHandler.ConnectedIds.Count == 0) { // STOP TASK -> SET CANCELLATION } return base.OnDisconnected(); } 并在连接上: public override Task OnConnected() { Logger.Log.file.Info("[TaskActionStatus HUB => OnConnected] Start"); UserHandler.ConnectedIds.Add(this.Context.ConnectionId); // start task only if at least one listener if (UserHandler.ConnectedIds.Count < 2) { // START A TASK -> (WHILE LOOP THAT GETS DATA FROM DB EVERY 2 SEC) } return base.OnConnected(); } 现在,当用户只是关闭他/她的浏览器窗口时就会出现问题.我无法知道他/她是否断线. 所以基于一些问题here,我会打电话给每个客户并得到回复.我不知道怎么做. 我猜我会这样: public static void CheckConnectedUsers() { var context = GlobalHost.ConnectionManager.GetHubContext<TaskActionStatus>(); foreach (var connection in UserHandler.ConnectedIds) { context.Clients.Client(connection).verifyConnected("online?"); } } 但是如何从客户端获得回复? 编辑: 我需要连接的确切用户数,因为如果连接了至少一个用户,我需要启动一个任务.我想确保所有连接用户只运行1个任务< 2(开始任务).假设这样的情况:2个用户查看使用signalR的页面. HashSet现在包含2个ID,并且正在运行任务.一个关闭他/她的浏览器,几秒钟后,另一个刷新他/她的浏览器.现在,第一个(关闭他/她的浏览器的那个没有执行OnDisconnected方法,所以HashSet仍然有他/她的ConnectionId,而“刷新”的那个确实执行OnDisonnected,然后OnConnected将connectionId添加到HashSet.所以相反在HashSet中只有一个ConnectionId并启动一个任务,HashSet包含2个(旧的 - 不再连接,只是刷新他/她的浏览器的那个),并且任务再也没有开始. 谢谢 解决方法
使用SignalR 1.0,OnDisconnected应始终触发,即使用户关闭其窗口(如果服务器重新启动,则例外).
OnDisconnected可能不会立即触发,因为如果客户端没有“中止”连接,则它被认为是“不干净”,因为客户端可能会尝试重新连接(如果您重新连接,则根据SignalR的语义没有断开连接) . 默认情况下,服务器调用OnDisconnected以进行“不干净”断开连接大约需要30秒.这可以通过GlobalHost.Configuration.DisconnectTimeout重新配置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何为其模型调用“null”的局部视图?
- ASP.Net C#AssemblyInfo版本不起作用
- .net – WebApi OData实体集/密钥/导航/密钥支持
- 是否有基于.NET的中央身份验证服务实现?
- 在ASP.NET MVC中检索当前视图名称?
- asp.net-mvc – 在2015年的MVC 5 Razor视图中减少VS 2017 I
- ASP.NET MVC之如何看待内置配置来提高性能优化(四)
- asp.net-mvc – ASP.NET MVC从控制器抛出并处理错误
- asp.net-mvc – 如何为MVC创建自定义验证属性
- 我可以在同一解决方案中拥有多个ASP.Net网站吗?