當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

在大型社區系統中用二維數組完成用戶高級技巧(1)

在大型社區系統中用二維數組完成用戶高級技巧(1)

更新時間:2019-05-25 文章作者:未知 信息來源:網絡 閱讀次數:

在大型的社區系統中,有很多的用戶高級功能需要實現.例如查詢用戶所在的版面,給特定的用戶發送短消息,
查詢用戶的信息,用戶等級管理等等.這些高級功能的實現有很多的方法,比如
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,呼叫特定的用戶
待續

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
亚洲嫩草影院久久精品