ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 也谈在asp聊天室程序中实现悄悄话功能(转)

也谈在asp聊天室程序中实现悄悄话功能(转)

原创 Linux操作系统 作者:jcszjswkzhou 时间:2019-05-06 14:03:05 0 删除 编辑
也谈在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&""‘这里是形成一句完整的发言象“胡椒狗傻傻地对梦蝶说:怎么了?”。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
%>


ShowPage


<%
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。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-124775/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-29

  • 博文量
    2714
  • 访问量
    1979330