首页 | 免费域名 | 个人服务器 | 一流信息监控拦截系统 | 虚拟主机知识库 | ASP 空间 | ASP技术大全 | 下载中心 | 客户服务中心
  7i24 > ASP技术大全 > 代码乐园 >
    7i24 .Com  
  也谈在asp聊天室程序中实现悄悄话功能

7i24.Com不停为您服务
也谈在asp聊天室程序中实现悄悄话功能

也谈在asp聊天室里实现悄悄话功能
悄悄话功能可以说是聊天室所必备的一个功能项,在用asp编写的聊天室程序中要想实现该功能可以有很多的方法,其大致的思路是创建一个有足够信息的数据结构,该数据结构中要包含足够的信息,比如:说话的人、说话的对象、是否为私聊、房间的名字等等。只要有了足够的辄余信息,就能够轻松的实现诸如悄悄话、房间、表情等等功能了。在高级语言中,例如:c、c++、java都可以很容易的实现新的数据结构的创建,在perl中也可以用关联数组来实现。但在vbscript中实现就不可能了,但我们可以借鉴cgi程序处理字符串的方法,比如:var1=from_who&”,”&to_who&”,”
&chat_value那我们在要用时,只需根据“,”号来分割这个字符串而得到各个部分就行了。对于交谈内容的储存方式,我觉得用application数组比较好,它既避免了频繁的文件读写,又可以很容易的控制大小和进行排序。有人提出用数据库,数据库的结构很好,但在大负荷下其性能堪忧。以下是大致的程序段:
1、 在global.asa中创建application数组
sub application_onstart()
dim pchat_value(50)
application(“gchat_value”)=pchat_value() ‘用来保存谈话的内容
application(“gchat_number”)=0 ‘用来指定该数组当前的大小
……
……
end sub
2、 showpage.asp用来处理谈话以及显示
<%
if request.servervariables("Request_Method")="POST" then
  color=request.form("selColor") ‘获取用户所选的颜色
  chat=request.form("txtChat") ‘获取用户的谈话内容
  who=session("sChater_Name")‘获取讲话者的身份
  towho=request.form("selShow")‘获取谈话的对象
  action=request.form("selAction")‘获取用户所选的动作
  common_or_private="common"‘设置缺省的谈话方式为公聊
  chat=who&formexpression(expression)&formaction(action)
&towho&"说:"&formcolor(color)&chat&"</font>"‘这里是形成一句完整的发言象“胡椒狗傻傻地对梦蝶说:怎么了?”。Formexpression、formaction等均为子程序,用来形成动作、表情等等。
  if request.form("chkPrivate")="private" then
   common_or_private="private"
   chat=chat&"[私聊]" ‘在显示的最后加上私聊的字样
  end if
  application.lock
  call convert(common_or_private&","&who&","&towho&","&chat&"
")
‘ convert子程序是用来将前面字符串存储到  application(“gchat_value”)中,并调整其顺序的。
  application.unlock
end if
%>
<html>
<head>
<title> ShowPage </title>
</head>
<body>
<%
for i=0 to application(“gchat_number")-1
 position_one=instr(application(“gchat_value”)(i),",")
 position_two=instr(position_one+1,application(“gchat_value")
(i),",")
 position_three=instr(position_two+1,application(“gchat_value")
(i),",")
‘以上的三句是用来计算出字符串中三个”,”号的位置
if mid(application(“gchat_value")(i),1,position_one-1)="common" or
session("sChater_Name")=mid(“gchat_value")
(i),position_one+1,position_two-position_one-1) or session
("sChater_Name")=mid(“gchat_value")(i),position_two+1,position_three-
position_two-1) then
‘以上这段是说若用户所选的谈话方式是”common”也就是公聊,或者用户当前的名字与字符串中who或者towho相同的话,也就是用户要么是当前这句话的发言者要么是发言的对象,就可以看到这句话了。
  response.write mid(application(session("sRoom_Name")&"_Value")
(i),position_three+1)‘这里才是谈话的内容。
 end if
next
%>
3、 convert子程序
<%
sub convert(Message)
dim tmpChat_Value(50)
pChat_Value=application(“gchat_value")
pChat_Number=application(session("gchat_number")
if pChat_Number>=50 then
 pChat_Number=0 ‘清空
end if
for i=0 to pChat_Number
 tmpChat_Value(i)=pChat_Value(i)
next
pChat_Value(0)=Message
for i=0 to pChat_Number
 pChat_Value(i+1)=tmpChat_Value(i)
next
‘用来将当前的发言放到最前面
pChat_Number=pChat_Number+1
application(“gchat_value")=pChat_Value
application(“gchat_number")=pChat_Number
end sub
%>
通过以上的程序我们就能实现私聊的功能了,另外想加入诸如房间等等功能也可以照此方法。我已经测试了这种方法的性能问题,答案是满意的。欢迎大家与我讨论。我的mail:bad_boy2@21cn.com。


  2002年1月9日  阅读 1040 次  发送此页给朋友  来源:    版权争议  删除

相关文章:   近期热点:

上一篇: 实现聊天室的悄悄话功能(下)
下一篇: 使用ASP编写农历算法(一)
返回上一层...
搜索:

(C)2004-2022 7i24.Com 保留所有权利