top
Loading...
聊天室實現私聊(四)
sense

我曾經做過一個比較復雜的聊天室,幾乎擁有BBS聊天室的所有功能,但因為是用application做的,所以比較浪費資源。我覺得用數據庫做更可靠,更簡單。
可以設定這樣的一個數據庫chat,結構如下:

字段名 類型 長度 備注
1.. OBJECT CHAR 10 操作對象,ALL或某人
2.. MSG CHAR 250 消息內容
3.. TIME DATETIME 發送時間
4.. SENDER CHAR 10 發送人
5.. ROOM CHAR 10 房間名,發送人所處房間

在通常情況下OBJECT為ALL,當需要說悄悄話時可以指定某人。
顯示內容時,只要一句“Select * from chat where object='all' or object='" & session("userid") & "'"就可以了。Session(”USER ID“)是當前用戶的身份認證。
如此,每個用戶看到的聊天內容都是自己“應該”看到的。如果配合另外一些數據表,如ROOM,USER,則還可以完成諸如隱身、踢人、開房間、關房間、隱藏房間等功能,如果再加上一個表情配置文件EMOTE。TXT就可以做表情動作了。當然,這么做就需要在發送信息是有一個解釋程序,用以判斷用戶輸入的是何種命令,并相應修改數據表。

roking:roking@21cn.com

先說一下整體構思:采用application對象保存所有聊天公用信息,如訪問者ID、房間狀態、公聊信息等,同時為每個人用Senssion對象保存和個人相關的信息,如:表情、顏色、談話目標ID等。
用戶的顯示區從application對象中取出公聊信息并加上針對自己的私聊一同顯示。。。。


nikl:nikl@163.net

“悄悄話”只須用Application和Session兩個內建對象就可以輕松實現具體如下,希望能幫到忙!

在用戶登陸時分別為他建立獨立的Application & Session對象。例如有三個用戶nikl hero viki在他們登陸時用ASP的Request分別取得三個用戶名并存入一個變量(如name)然后作Session和Application的初始化:
Session("Uname")=name
Application(who)=""
耳語信息存在變量 say 中,交談對象存在who。例如:
nikl to viki : 你吃飯了嗎?
服務器端執行代碼,經過條件判斷后執行耳語傳入操作,談話內容“你吃飯了嗎?”及交談對象“VIKI”并分別賦于變量 say 和 who; 信息(你吃飯了嗎?)傳 入Application("viki")中了(代碼:Application(who)=say),目的用戶端只要刷新Application(Session"Uname")變量就可以看到信息了,程序結束。
請留意:
在VIKI端的<%=Application(Session("name"))%>實際是<%=Application(VIKI))%> (在VIKI登陸時Session("Uname")已定義為“VIKI”并存在瀏覽器)因而,當信息內容框刷新時Session("Uname")將被“VIKI”替換,VIKI就可以看到NIKL發送來的耳語信息,而hero端<%=Application(Session("Uname"))%>實際是<%=Application(hero)%>這個變量是空的因而hero就看不到NIKL發送給VIKI的信息。就這樣巧妙地完成了一次耳語的傳送。

北斗有巢氏 有巢氏北斗