帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP编程
在大型社区系统中用二维数组实现用户高级功能
作者:佚名 发布时间:2005-04-02 来源:不详
 

 在大型的社区系统中,有很多的用户高级功能需要实现.例如查询用户所在的版面,给特定的用户发送短消息,查询用户的信息,用户等级管理等等.这些高级功能的实现有很多的方法,比如
   1,用数据库实现.这也是最简单且最常用的方案.它的实现原理如下:
   将用户的信息存如规划好的数据库中,若用户的状态改变则修改数据库.若有对该用户的查询请求则申请对数据库的调用.看下面的一个表的示例
   CREATE TEBLE user_info (user_id mediumInt not null ,
                           user_id Char not null ,
                           nick_name Chaer not null ,
                           user_sex  char  not null ,
                           user_level smallInt not null default 3,
                           login_time Time default time(),
                           logout_time Time default time(),
                           user_position Char default "大厅",
                           .......
                           .......
                          )
    好了,上面的这个表格只是一个简单的例子,它用来保存用户信息的方方面面.在一个用户登陆(login)的同时对该表某些表项做一些初始化,当用户状态改变时对该表的相应表项做必要的修改,然后在应用中调用该表的相关的表项.例如查看用户的位置select use_position from user_info where user_name="user_name".这种方案的最大的缺点在于系统的开销.想象一下当大量的用户在查询时要打开多少个数据库的连接进程.而且每一次的用户状态改变,比如从一个版面到另一个版面的时候都需要对数据库进行修改.这对于大型的系统是不实用的.
    2,将一个功能模块封装,调入内存.这是最佳的解决方案,比如用isAPI来实现,或者用Java来实现.它的速度非常的快,且只需要在系统的初始化时对它进行初始化,当用户登陆(login)和改变状态时调用相关的方法(method)来修改表项就行了.我将在本文的实现篇中给出相关的介绍.但这种方案在实现的时候相对较难
    3,就是本文提到的用二维数组来实现了.它的第一维用来定义用户的信息,然后将所有的用户组合为一个二维的数组.再将该数组保存到一个application的二维数组中,由于application变量的特性.它将常驻于服务器端内存中当需要改变或者是调用时将该数组本地化后,做相应的改变再回存到application数组变量中.它的结构如下
          1│姓名│呢称│级别│方位│登陆时间│预留位│预留位│
          2│姓名│呢称│级别│方位│登陆时间│预留位│预留位│
          3│姓名│呢称│级别│方位│登陆时间│预留位│预留位│
          4│姓名│呢称│级别│方位│登陆时间│预留位│预留位│
          5│姓名│呢称│级别│方位│登陆时间│预留位│预留位│
    ......
    ......
    当用户登陆时我们用我们自定义的一个init()函数来在第二维加入一个数组元素,等用户离开时在用一个update() 函数将相应的用户项回存如数据库中或者是文本文件中.其实更好的方案并非用二维数组,而是用一个结构数组,就是创建一个用户结构再将其组合为一个数组,例如(为了方便采用的描述语言)
        object use_info
                {
         int user_id;
         char user_name="";
         char user_nickname="";
         int user_leverl=3;
         char user_postion="";
         ......
         ......
         send_message();
                 ......
        }
        end object;
   每当一个用户登陆时将它对象化,
        var user=new user_info;
        user.user_id=1;
        user.user_name="姓名";
        user.usr_nickname="呢称";
        user.user_position="";
        ......
        ......
        var application("user_counter");
        application("user_info")(application("user_counter"))=user;
        application("user_counter")++;
        ......
        ......
   现在如果你要查询一个名字为张三的用户的位子,
        for (i=0;i<application("user_counter");i++)
        {
         var user=new user_info;
         user=application("user_info")(i);
         if user.user_name=="张三"
          print user.user_position;
                }
    但是如我们所知,vbscript并没有创建对象的功能,用jscript可以定义对象,但没有办法将它保存到application数组中,应为它认为application变量是一个特殊的变量.你不能将数组对象赋值给它,那样就会导致类型出错.所以我们只好用vbscript的二维数组来实现了.其实思路是相同的.(下面是标准的vbscript 语句)
        sub system_init()
         dim user_info(100)
         dim application("user_counter")
         application("user_info")=user_info
         application("user_counter")=0
        end sub
        
        sub user_init()
         set rs =server.createobject("RecordSet")
         strpath="user_info.mdb"
         rs.open user_info,strpath,,,cmdTable
         '打开数据库进行初始化
         dim user(10)
         user(0)=application("user_counter")
         user(1)=rs("user_name")
         user(2)=rs("user_nickname")
         user(3)=rs("user_level")
         user(4)=time()'登陆的时间
         ......
         ......
         dim user_info(100)
         user_info=application("user_info")'将application数组本地化
         user_counter=application("user_counter")
                 user_info(user_counter)=user
         user_counter=user_counter+1
         application.locak
         application("user_info")=user_info
         application("user_counter")=user_counter
         application.unlock
        end sub
   现在要查询用户张三的登陆时间
        for i=0 to application("user_counter")-1
         if application("user_info")(i)(1)="张三" then
          response.write application("user_info")(i)(4)
         end if
        end for
   下面我们再来看其它的高级功能的实现
   1,呼叫特定的用户 

 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·在大型社区系统中用二维数组实现  (2005-03-12)
 ·关于打印页面的一些经验  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·在ASP中使用数据库
·使用ASP脚本技术
·通过启动脚本来感受ASP的力量
·学习使用ASP对象和组件
·解析asp的脚本语言
·初看ASP-针对初学者
·ASP开发10条经验总结
·ASP之对象总结
·ASP与数据库应用(给初学者)
·关于学习ASP和编程的28个观点
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统