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

由于需要记录当前在线用户,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集合里面有重复添加和删除的动作。

因为无法确认页面是最后一次关闭(或者是我没找到)所以才采用这种方法实现。

最新文章

  1. 从“差不多了”到 正式发布 -- 新浪微博WinPhone UWP版诞生记
  2. N-Tier Entity Framework开源项目介绍
  3. arcmap Command
  4. cell 和 cellHeight的先后执行顺序
  5. 解决Django发送中文邮件时的编码及乱码问题
  6. java 15-2 Collection的高级功能测试
  7. linux基础命令学习(四)计划任务
  8. 页面加载后的input change事件 1或2个框 ajax
  9. c/c++ void 指针
  10. PHP 根据值查找键名
  11. java 内存 垃圾回收调优
  12. 读取和存储文本文件,UTF-8和GB2312通用的函数
  13. 新概念英语(1-37)Making a bookcase
  14. Allowed memory size of 134217728 bytes exhausted
  15. 我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC
  16. js焦点事件:onfocus、onblur、focus()、blur()、select()
  17. spoj Fast Multiplication
  18. overload与override的区别
  19. 18 [网络编程]-UDP
  20. FFMS2 API 译文 [原创]

热门文章

  1. 把dataset对象转换成list集合方法
  2. mybatis 操作数据错误Truncated incorrect DOUBLE value: &#39;&#39;
  3. HTML 学习杂记
  4. nginx的hash
  5. SparkStreaming updateStateByKey 保存记录信息
  6. Hadoop3集群搭建之——配置ntp服务
  7. 219.01.19 bzoj3252: 攻略(长链剖分+贪心)
  8. [zhuan]SQLServer查询最近一天,三天,一周,一月,一季度方法
  9. devexpress 的combobox怎样只能选择不能输入
  10. 利用url传多个参数