文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>浅谈管理软件中的用户在线状态控制【附部分C#参考代码】

浅谈管理软件中的用户在线状态控制【附部分C#参考代码】

时间:2010-09-30  来源:吉日嘎拉 不仅权限管理

我们经常会遇到

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

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

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

 

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

代码         /// <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秒一次也无所谓的。

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载