学到新东西就记录一下。也许正好有人需要~~~~~~

由于需要记录当前在线用户,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统计在线用户人数的更多相关文章

  1. 使用 Redis 统计在线用户人数

    在构建应用的时候, 我们经常需要对用户的一举一动进行记录, 而其中一个比较重要的操作, 就是对在线的用户进行记录. 本文将介绍四种使用 Redis 对在线用户进行记录的方案, 这些方案虽然都可以对在线 ...

  2. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

  3. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  4. ASP.NET MVC中加载WebForms用户控件(.ascx)

    原文:ASP.NET MVC中加载WebForms用户控件(.ascx) 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControl ...

  5. Tomcat集群下获取memcached缓存对象数量,统计在线用户数据量

    项目需要统计在线用户数量,系统部署在集群环境下,使用会话粘贴的方式解决Session问题.要想得到真实在线用户数,必须是所有节点的总和. 这里考虑使用memcached存放用户登录数据,key为use ...

  6. 用HttpSessionListener统计在线用户或做账号在线人数管理

    使用HttpSessionListener接口可监听session的创建和失效 session是在用户第一次访问页面时创建 在session超时或调用request.getSession().inva ...

  7. Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室)

    简介       ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端 ...

  8. ASP.Net Mvc实现自定义User Identity用户身份识别系统(1)

    目的 当我们新建asp.net mvc 项目时,我们在使用下图所示的代码是否有以下思考: 1,在this.User.Identity.Name,为什么可以使用this便可以选中Name属性: 2,若项 ...

  9. ASP.NET Identity系列02,在ASP.NET MVC中增删改查用户

    本篇体验在ASP.NET MVC中使用ASP.NET Identity增删改查用户. 源码在这里:https://github.com/darrenji/UseIdentityCRUDUserInMV ...

随机推荐

  1. spring boot 无法启动

    spring boot 使用内置tomcat 报错  : Unable to start embedded Tomcat servlet container Tomcat connector in f ...

  2. IOS初级:NSTimer

    @property (nonatomic, strong) NSTimer *timer; 添加定时器 self.timer = [NSTimer scheduledTimerWithTimeInte ...

  3. 对团队项目的NABCD的分析

    需求(N):我们的软件是面向广大想记录自己所爱动植物成长点滴的人.目前没有很好地软件,只有手机或者电脑上的笔记本和备忘录. 做法(A):我们的软件可以交流可以节约积累知识的时间,将记录从记事本中摘出来 ...

  4. springMVC 学习 五 参数传递(包括restful风格)

    (一)SpringMVC Controller接受参数的方式 (1) 前端传递的参数,在springMVC的controller中使用基本数据类型或者String 类型进行接受 在前端有一个form表 ...

  5. 2018.11.05 bzoj3124: [Sdoi2013]直径(树形dp)

    传送门 一道sbsbsb树形dpdpdp 第一问直接求树的直径. 考虑第二问问的边肯定在同一条直径上均是连续的. 因此我们将直径记下来. 然后对于直径上的每一个点,dpdpdp出以这个点为根的子树中不 ...

  6. Java中各类Cache机制实现解决方案[来自CSDN]

    摘要:在Java中,不同的类都有自己单独的Cache机制,实现的方法也可能有所不同,文章列举了Java中常见的各类Cache机制的实现方法,同时进行了综合的比较. 在Java中,不同的类都有自己单独的 ...

  7. Windows下python环境配置

    步骤: 1.安装Python.Sublime Text: 2.打开Sublime Text,在菜单栏点击“Tools”->“Build System”->“New Build System ...

  8. mysql学习之路_高级数据操作

    关系 将实体与实体的关系,反应到最终数据表的设计上来,将关系分为三种,一对多,多对多,多对多. 所有关系都是表与表之间的关系. 一对一: 一张表的一条记录一定只对应另外一张表的一条记录,反之亦然. 例 ...

  9. 学以致用六---Centos7.2+python3.6.2+django2.1.1 --搭建一个网站

    目的,创建django project,开始django web之旅 一.创建一个project    在opt目录下创建一个project [root@gxc opt]# django-amdin. ...

  10. Python实现文件备份

    Python实现文件拷贝 2017年8月27日 1.实现目的 统一时间对服务器某文件夹内文件进行备份保存,如若备份成功则不提示任何错误,否则将以邮件的形式告知管理员,备份出错. 2.程序流程图 主要流 ...