浅谈思路严谨的用户在线状态控制【附部分C#参考代码】

  我们经常会遇到:

  1:客户购买了5个用户的许可,10个用户的许可,软件需要限制用户的并发数量,我知道就是Oracle的并发用户达到20个以上,那费用是非常昂贵的。

  2:一个用户只能登录一次或者是一个账号在同一时间只能登录一个,若已经是登录了就不让再登录了,需要能控制用户的并发登录问题。

  3:有的系统也需要能实现在线用户列表、用户的登录状态等,特别是即时消息功能的内部管理系统等。

  先把自己的思路整理图贴出来如下:

  C/S的部分参考代码如下:这里为了实现定时获取消息的平滑,利用了线程的方式,这样不影响用户的操作,是多线程实现定时获取消息的。

/// <summary>

/// 消息检测的线程

/// </summary>

private Thread MessageThread = null;

this.MessageThread = new Thread(new ThreadStart(this.MessageCheck));

MessageThread.Start();

private void MessageCheck()

{

while (!this.Exit
Application)

{

if (this.FormLoaded && (!this.Busyness))

{

if (this.Tag == null)

{

// 获得新消息

// this.bwGetNewMessage.RunWorkerAsync();

this.GetNewMessage();

this.Tag = true;

}

else

{

// 若已经是最小化、或者被隐藏起来了,就
不用获取在线状态,可以提高效率

if ((this.WindowState == FormWindowState.Minimized) || !(this.Visible))

{

// 阅读消息状态

// this.MessageChek();

}

// 获取在线状态列表

// this.bwGetOnLineState.RunWorkerAsync();

this.GetOnLineState();

this.Tag = null;

}

}

Thread.Sleep(1000);

}

}

  B/S部分的参考代码如下:

  UserOnLine.aspx 页面,专门接收,我还活着的用户的报道,统一呼叫这个页面,表示自己还活着,在线上。用了javascript 的 setTimeout 功能,定时在服务器上用 ajax 方式进行签到,这样可以正确处理B/S系统的在线情况:

<script language="javascript">

function ReloadSession() {

XmlPost("Modules/Common/User/UserOnLine.aspx");

// 每100秒钟刷新一次

// alert("ReloadSession");

setTimeout("ReloadSession()", 1000 * 100);

}

ReloadSession();

</script>

  以上只是一个非高科技的,用最传统的方法,最说得通的方式,正确解决在线用户的状态,其中解决了B/S,C/S通用的在线方式问题,突然断电等异常情况下的事务处理在线判断,服务器上,还可以部署在线状态跟踪器等,100%完全正确做到在线状态,还是有点儿小困难,特别是B/S的项目,目前的能力,只能做到近似效果,当然根据实际需要,也可以修改向服务器报道我活着的频率,例如5秒报道一次,那就更接近真实在线情况了,当然在线客户数量很少时,1秒一次也无所谓的。

时间: 2024-10-26 15:04:22

浅谈思路严谨的用户在线状态控制【附部分C#参考代码】的相关文章

一起谈.NET技术,浅谈思路严谨的用户在线状态控制【附部分C#参考代码】

我们经常会遇到: 1:客户购买了5个用户的许可,10个用户的许可,软件需要限制用户的并发数量,我知道就是Oracle的并发用户达到20个以上,那费用是非常昂贵的. 2:一个用户只能登录一次或者是一个账号在同一时间只能登录一个,若已经是登录了就不让再登录了,需要能控制用户的并发登录问题. 3:有的系统也需要能实现在线用户列表.用户的登录状态等,特别是即时消息功能的内部管理系统等. 先把自己的思路整理图贴出来如下: C/S的部分参考代码如下:这里为了实现定时获取消息的平滑,利用了线程的方式,这样不影

浅谈.NET反射机制的性能优化 附实例下载_实用技巧

可能大家谈到反射面部肌肉都开始抽搐了吧!因为在托管语言里面,最臭名昭著的就是反射!它的性能实在是太低了,甚至在很多时候让我们无法忍受.不过不用那么纠结了,老陈今天就来分享一下如何来优化反射! 概述 本文涉及到的反射优化的途径有如下两种: 通过Delegate.CreateDelegate()创建委托进行优化 通过.NET4的动态运行时进行优化 如果您还知道其他更加有效的优化途径,请不吝赐教! 准备工作 今天我们总计要对比五种不同的调用对象成员的方式,也算是一种性能测评. 在开始之前,我们首先定义

浅谈站长如何挖掘符合用户搜索的关键词

站长每天都要围着用户体验转,毕竟用户体验是否良好则是决定网站能否生存下去的关键因素.只有网站拥有了良好的用户体验,才能谈关于网站发展的.网站赚钱的方向.而对于网站来说,关键词则是网站建设的第一步,正所谓拥有一个好的开始将是成功了一半.那么关键词选择就是站长做站的开始了,对于关键词的选择,据笔者所知,大部分站长都是通过百度指数.相关搜索.下拉框和站长查询工具类的来进行关键词选择的,笔者不是说这些方法不正确,但选择关键词应该更多的是按照网站面对的用户群和用户搜索习惯来选择,而有些关键词的流量明显是刷

浅谈如何创作让用户认可并接受软文

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 软文推广就是为了让用户不再受活生生的广告信息,在看推广信息中也可以找到自已所需要的信息.而软文推广也使得站长与用户的沟通方式升级.不再以硬性广告摆向用户面前,使得用户反感.所以,软文的好处何其之多,笔者就不一一说了.通过软文带来的效果也是很不错的.今天笔者分享下如何让用户认可自己的软文并且淡然接受文章中的推广信息的: 让用户认可软文的方法 一

浅谈网站在吸引用户过程中需采取的方法与注意事项

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 随着互联网技术的不断进步,互联网每天都在诞生一位又一位的站长,而什么样的网站才能让用户都喜欢?什么样的网站才能得到最大的价值流量呢?如何才能吸引用户,增加我们的访问量?相信这一连串的问题困惑着不少的站长,下面针对这一些问题我与大家一起分享一下我的观点与看法. 首先,网站首页要设计精美,内容结构要合理,而且能突出网站的主题.网站的首页最好不要太

浅谈在ASP.NET的权限控制机制

在写ASP.NET项目时经常会碰到权限管理的问题,一般情况下是在每个页面都加入权限控制的代码,其实通过写一个页面基类(PageBase),然后所有需要进行权限判断的页面继承此类,在PageBase的ProcessRequest中加入权限控制代码,那么其他继承此类的子页面就不用写了. 由于在ProcessRequest方法中我们只可以得到HttpContext信息,那么怎么跟权限挂钩呢?每个页面都是一个类,并且我们可以知道当前登陆者的id(假如用户登陆成功,由User.Identity.Name可

菜鸟浅谈如何做好网站用户体验

身边搞优化的朋友最常谈论的话题就是做好网站用户体验,那时算是涉世未深,不是太明白.不过现在对用户体验的重要性体会还是比较深的,今天就在这里小小卖弄一下,和大家共享一些自己对用户体验的理解,大家共勉,有错误之处,还望提出哦. 一.什么是用户体验? 百度上摆一下:用户体验是一种纯主观在用户使用产品过程中建立起来的感受.这个说法比较官方了,通俗点说,就是你在使用东西的时候感受.正如读者在阅读我这篇文章时候,若是看后有学到东西,那就是我的文章用户体验比较好了,能给读者带来知识;反之,当然就是不好了.再如

浅谈360浏览器绑架用户

10月23日,一位微博ID名为手机研发老罗的用户爆料,通过360浏览器登陆"百度网盘",却被设置为"360云盘"的事件曝光.手机研发老罗更是在微博里质问奇虎360 CEO周鸿祎:本性难移. 根据手机研发老罗的描述,用360浏览器登陆百度云盘,在百度云盘的"页面里"出现提示:点击可免费升级xxG网络硬盘.但在"手机研发老罗"点击后,页面却出现:恭喜你开通了360云盘的提示. "通过伪装'寄生'于竞品,蚕食用户的手法并不

浅谈怎么才能与用户进行友好的沟通交流

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网站上如何留住已经来了的用户? 这是站长做站要注意的一个非常重要的问题.要及时和用户进行有效沟通,多种途径最大程度上的留住已有客户.怎样才能做到这几点呢?我认为如下几点沟通方式是目前较为有效的沟通方法,值得各位做站的朋友尝试: 第一. 利用QQ或其他其他方法如在线客服等作为沟通工具 只需在你提供的产品或者视频后面附上沟通的QQ号或者QQ群,让