一起谈.NET技术,浅谈思路严谨的用户在线状态控制【附部分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.ExitApplication)
{
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-22 01:14:32

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

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

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

民用报警服务技术浅谈

报警行业的设备和系统数字化.网络化的速度在加快,未来的报警服务行业市场是网络化的专属,传统的报警服务商业模式正在发生变化,通过卖产品和施工实现盈利的方式在弱化.在互联网时代,报警服务企业在实现技术变现的时候,更多要依靠服务去获得市场和用户的认可. 相对于传统的报警设备,网络化的报警设备在布线和安装上都有了长足的进步,加上IPC的软硬件,以及移动端的开发应用,如今的报警操作系统不仅使用方便,提高用户的使用体验,还改变了传统报警的样式,使得接警人员对报警区域进行可视化联动操作,降低误报率和报警运营中

技术人员谈管理之浅谈团队管理

古语云":马,匹马徘徊,万马奔腾;人,单影单身难行,合群大成."团队是由一些拥有互补技能,为了共同目标而遵循共同方法和行为规则,相互承担责任的人组成的群体. 谈团队管理就不能不提人力资源管理,人力资源管理简单的理解就是管人,由于人才是企业最重要的财富,因此人力资源管理的重要性可想而知. 人力资源管理的过程包括如下4个方面: 1.      制定人力志愿计划 人力资源计划包括识别和记录项目角色.责任和汇报关系. 2.      组建项目团队 组建团队就是找人,为项目工作找到所需的人员以及

偷也是门技术——浅谈XMLHTTP应用:新闻小偷[转]

xml 本文参考互联网整理而成(在此感谢资料奉献者).希望本文尽量系统,尽量易懂. 偷,即无劳而获.在网络上,诸如某大型权威站点发布了新闻,而自己的小小站点也想与时俱进,和人家一样同步更新,多N啊.于是,偷就是最好的办法了.偷是不道德的,不鼓励偷,但又不提倡不偷,都是技术惹的祸,扯远了~! 小偷程序是什么? 其实是通过XML中的XMLHTTP对象调用其它网站上的网页,甚至可以将接受的HTML代码进行过滤以获得需要内容(比如提取某某气象站,不可能是将整站提取显示,而只是需要显示天气的那部分). 其

安卓AOP三剑客之Android APT技术浅谈

通过学习与使用square公司的开源项目javapoet,来实现仓库层动态生成代码 安卓AOP三剑客: APT, AspectJ, Javassist Android APT APT(Annotation Processing Tool 的简称),可以在代码编译期解析注解,并且生成新的 Java 文件,减少手动的代码输入.现在有很多主流库都用上了 APT,比如 Dagger2, ButterKnife, EventBus3 等 代表框架: DataBinding Dagger2 ButterKn

一起谈.NET技术,VS 2010 和 .NET 4.0 系列之《VS 2010代码智能提示的改进》篇

本系列文章导航 VS 2010 和 .NET 4.0 系列之<ASP.NET 4 中的SEO改进 >篇 VS 2010 和 .NET 4.0 系列之<干净的Web.Config文件 >篇 VS 2010 和 .NET 4.0 系列之<起始项目模板>篇 VS 2010 和 .NET 4.0 系列之<多定向支持>篇 VS 2010 和 .NET 4.0 系列之<多显示器支持>篇 VS 2010 和 .NET 4.0 系列之<代码优化的Web开发

一起谈.NET技术,创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]

在<上篇>中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加.修改和删除操作的存储过程.但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板.如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利.借助于T4 ToolBox这个开源工具箱,多文件的SQL Generator的实现变得异常简单. 一.多文件代码生成器会带来多大的便利? 我们先来直观的感受一下较之<上篇>提供的单一文件的代码生成器,基于多文件的代码生成解决方案会

浅谈C#手机号换成111XXXX1111 这种显示的解决思路_C#教程

如下所示: String subStr=phone.Substring(3,4); oldcellphone.Text = phone.Replace(subStr,"****"); /// <summary> /// 替换手机号中间四位为* /// </summary> /// <param name="phoneNo"></param> /// <returns></returns> pro

浅谈Python程序与C++程序的联合使用_python

作为Python程序员,应该能够正视Python的优点与缺点.众所周之,Python的运行速度是很慢的,特别是大数据量的运算时,Python会慢得让人难以忍受.对于这种情况,"专业"的解决方案是用上numpy或者opencl.不过有时候为了一点小功能用上这种重型的解决方案很不划算,或者有时候想要实现的操作在numpy里面没有,需要我们自己用C语言来编写.总之,我们使用Python与C++的混合编程能够加快程序热点的运算速度. 首先要提醒大家注意的是,在考虑联合编程之前一定要找到程序运行