ASP.NET MVC使用SignalR统计在线用户人数
学到新东西就记录一下。也许正好有人需要~~~~~~
由于需要记录当前在线用户,emmmm又是没做过的。。。
本来想用数据库的形式,但是想想这么简单的功能百度肯定有。遨游一波百度,有所收获。。。。
虽然老是那么几篇文章重复。。。。
大概就是在用户登录时Session记录下数据,前台获取展示。下面这个文章感觉蛮好的。
Session方法参考网址:
https://www.cnblogs.com/taobox/p/4466187.html
看文章想起了我项目中有用到SignaIR,这个可以实现聊天室肯定可以知道在线用户人数。果断继续百度得到如下结果。。。。
参考网址 :
https://www.red-gate.com/simple-talk/dotnet/asp-net/tracking-online-users-with-signalr/
SignaIR中有OnConnected,OnConnected,OnDisconnected三个方法,具体实现如下。
public class ChatHub : Hub
{
//当前用户数量
private static int _userCount = 0;
//存储用户信息
private static List<string> list_UserName = new List<string>();
//链接
public override Task OnConnected()
{
var username = Context.User.Identity.Name; //获取用户的名称
if (!list_UserName.Contains(username))
{
_userCount++;
list_UserName.Add(username);
}
else
{
list_UserName.Add(username);
}
var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.online(_userCount);//推送全局,也可以推送给指定用户
return base.OnConnected();
}
//重连
public override Task OnConnected()
{
var username = Context.User.Identity.Name;
if (!list_UserName.Contains(username))
{
_userCount++;
list_UserName.Add(username);
}
else
{
list_UserName.Add(username);
}
var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.online(_userCount);
return base.OnReconnected();
}
//断开
public override Task OnDisconnected(bool stopCalled)
{
var username = Context.User.Identity.Name;
var count = list_UserName.Where(x => x == username).Count();
if (count == 1)
{
_userCount--;
list_UserName.Remove(username);
}
else
{
list_UserName.Remove(username);
}
var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.online(_userCount);
return base.OnDisconnected(stopCalled);
}
}
JS:
var chat = $.connection.chatHub;
chat.client.online = function (count) {
$("#online").html(count); //标签赋值
}
$.connection.hub.start();
这样就能得到有多少用户链接上来,然后我在_Layout.cshtml里面给控件赋值,就实现了。
上面做法有一点欠缺,应该可以看到我在list_UserName集合里面有重复添加和删除的动作。
因为无法确认页面是最后一次关闭(或者是我没找到)所以才采用这种方法实现。
ASP.NET MVC使用SignalR统计在线用户人数的更多相关文章
- 使用 Redis 统计在线用户人数
在构建应用的时候, 我们经常需要对用户的一举一动进行记录, 而其中一个比较重要的操作, 就是对在线的用户进行记录. 本文将介绍四种使用 Redis 对在线用户进行记录的方案, 这些方案虽然都可以对在线 ...
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)
简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
- ASP.NET MVC中加载WebForms用户控件(.ascx)
原文:ASP.NET MVC中加载WebForms用户控件(.ascx) 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControl ...
- Tomcat集群下获取memcached缓存对象数量,统计在线用户数据量
项目需要统计在线用户数量,系统部署在集群环境下,使用会话粘贴的方式解决Session问题.要想得到真实在线用户数,必须是所有节点的总和. 这里考虑使用memcached存放用户登录数据,key为use ...
- 用HttpSessionListener统计在线用户或做账号在线人数管理
使用HttpSessionListener接口可监听session的创建和失效 session是在用户第一次访问页面时创建 在session超时或调用request.getSession().inva ...
- Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室)
简介 ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端 ...
- ASP.Net Mvc实现自定义User Identity用户身份识别系统(1)
目的 当我们新建asp.net mvc 项目时,我们在使用下图所示的代码是否有以下思考: 1,在this.User.Identity.Name,为什么可以使用this便可以选中Name属性: 2,若项 ...
- ASP.NET Identity系列02,在ASP.NET MVC中增删改查用户
本篇体验在ASP.NET MVC中使用ASP.NET Identity增删改查用户. 源码在这里:https://github.com/darrenji/UseIdentityCRUDUserInMV ...
随机推荐
- BS架构如何实现即时消息提醒
转载地址:https://blog.csdn.net/cyjch/article/details/51506434
- xml约束的概念
1 xml 约束的概念 XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML ...
- NOIP训练测试3(2017081601)
上一波题还是比较水的吧?[?????] 也许吧! 但时间还是比较紧的,所以我从2.5个小时延长至3个小时了. 不管了,做题不能停,今天继续测试. 水不水自己看,我什么也不说(zhe shi zui h ...
- JS高级- OOP-ES5
1. OOP 面向对象三大特点: 封装,继承,多态 封装: 问题: 构造函数可重用代码和结构定义,但无法节约内存 为什么: 放在构造函数内的方法定义,每new一次,都会反复创建副本——浪费内存 解决: ...
- 使用 kbmmw 的ORM开发纯REST数据库访问服务
运行环境: WIN 10 X64 delphi 10.2.2 kbmmw 5.05.11 Firefox 58.0.2 今天使用最新的kbmmw 版本做一个基于ORM的纯数据库访问的REST 服务器 ...
- Python学习杂记
Python中关键字yield有什么作用? 首先得理解generators,而理解generators前还要理解iterables: 你可以用在for...in...语句中的都是可迭代的:比如list ...
- Architecture
SMART Crossbar The SMART crossbar is the primary building block in a SMART NoC that enables straight ...
- function类型(c++11)
1.c++五大可调用的对象 可调用的对象常常作为泛型算法的实参 1)函数 2)函数指针 函数名其实也是函数指针,只不过函数名是一个常量指针,它的值不能改变,只能指向该函数,不能改变它的值让它指向别的函 ...
- VBA编程中的 sheet1 与 sheets(1)的区别
[自己理解]sheet1是一个专有名词,不是任何对象的属性,只能单独使用,特指代码所在工作簿的那个sheet1(和顺序无关,是固定的一个表,sheets(1)则和顺序有关). 参考资料: 1.代码中一 ...
- s5-1 网络层引言
网络层要做什么? 源和目的之间的网络有哪些类? 数据报网络 提供无连接的服务 虚电路网络 提供面向连接的服务 网络层的目标:把数据分组一路送到接收机. 网络层利用下层--数据链路层提供的服 ...