实现聊天室的悄悄话功能(中)(转贴)

聊天室

聊天室程序是一个application和session对象结合性很强的asp程序。首先,它比较具有实时性,聊天速度太慢,那么没有人会喜欢的,而且在多人同时发言的时侯,如果程序处理不好,那么难免会发生张官李戴的现象,比如说明明张三说的话在先。李四说的话在后,但显示出来的结果却是倒转了。还有就是每个客户端显示的谈话内容不同步。(这里强调一点,聊天室的谈话内容自动更新方式主要是两种,一种是服务器自动更新,也就是它的聊天显示内容区是一个正在打开中的html流,每当服务器接收到用户的谈话内容就会发送到用户的浏览器中。另一种是用户端定时向服务器端发出更新请求。后者的实时性没前者强。但制作起来简单,要完成服务器端自动更新,光靠asp是无法完成的。因为ASP没有内置的延时功能。现在所举例的聊天室主要是以后者来说明的,但方法同样可以前者里使用)   
  要解决多个用户同时发言以及显示的顺序问题,那么就必须为谈话内容建立一个缓冲区,就好象操作系统的键盘缓冲区的功能一样,即使系统正在忙于处理别的任务,但还是可以准确地接受用户输入。   
  上面的程序例子:   
dim chats(20)   
for n=1 to 20   
chats(n)=application("chats")(n)   
next   
  就是建立了一个20个元素的chats数组,那么只需要再建立一个全局公用的计数器(用application对象来保存),用以指示当前最新的发言内容是在那一个元素当中。而每个用户又定义一个session对象的计数器。用以记录当前聊天者本机显示的信息是显示到那一条谈话记录上。两者之差的谈话内容都必须在下一次更新说话内容的时侯显示出来。   
  chats数组作为一个谈话缓冲区,是需要循环使用的。比如第一句发言的保存在chats(1)中,第二十句则保存在chats(20)中,而第二十一句则重新使用chats(1)来保存,而把第一句的内容覆盖掉。而chats数组只是用于处理公共的谈话内容。也就是不是“悄悄话”如果把悄悄话也作为一条新的信息保存在这里,那么就会影响的计数器了。因为对于非悄悄话的聊天对象来说。这句话是无意义的。为了减少条件判断,就把悄悄话另外用application("chat")这个应用对象变量来保存。在悄悄话的处理用,小虎并没有使用缓冲区,因此当同一聊天室内多个网友同时使用悄悄话功能时,就可能出现有的悄悄话在没被显示出来之前,被漏掉的缺点,大家不妨可以发挥自己的智慧去改进一下哦:)   
  当处理完chats的对话内容后。必须把它重新存储到application("chats")(n)这个全局的谈话缓冲区中,那样才能让所有用户共享对话内容。   
  下面是对耳语的谈话处理   
'耳语处理   
application("chat")="《font color=blue》"&usertime&"《/font》 《font color=black》"&username&"《/font》 《i》悄悄地对《font color=#00bb00》 "&request.FORM("whoto")&" 《/font》耳语《/i》:《font color=#0000aa》 "&usersays&"《/font》《BR》《BR》"   
'对谁说   
application("chatto")=request.FORM("whoto")   
'说话的人   
application("owner")=username   
session("chat")="true"   
end if   
  
  session("chat")是一个用来记录用户是否有悄悄话的标记,当更新对话内容的时候,就通过判断这个标记来判断是否有悄悄话产生。同时。通过applicaton("chat")记录对话内容,applicaton("chatto")悄悄话的对象,application("owner")保存发言者本人(别忘了悄悄话是自己和接受悄悄话的对方可以看见的哦:(,还有,当对ALL(所有人)发悄悄话时,大家都应能看见这句瞧瞧话。   
  当发言内容都分别进入了application("chats")(n)和applicaton("chat")这两个谈话缓冲区后。下一步要做的就是显示出对话内容了。这里先向大家提一下如何实现聊天事的定时刷新(客户端主动)   
  在我们的html文件的头有一个这样的标记   
  《meta http-equiv="refresh" content="2.5"》   
  这里示了html文档的更新类行,上面这个标记就是把本文档按2.5秒的速度不断自动刷新,那么利用这一点,就可以实现自动更新对话内容了。我们使用的显示对话的asp文件名为top.asp。下一节大家一起来看看它的结构。   

时间: 2024-09-17 04:28:24

实现聊天室的悄悄话功能(中)(转贴)的相关文章

实现聊天室的悄悄话功能(上)(转贴)

聊天室 '取得说话内容,并过滤其中的脚本语句   usersays=request.form("says")   if instr(usersays,"<script")>0 then   usersays=""   end if     '判断是否有谈话内容,没有的话就不作处理   if len(usersays)<>0 then   session("whoto")=request.form(&qu

实现聊天室的悄悄话功能(下)(转贴)

聊天室 <% @language="vbscript" %>   <%   Response.Expires=0   'response.buffer=true   %>   <meta http-equiv="refresh" content="2.5">   <body bgcolor="<%=application("zj_1color")%>"

聊天室实现私聊(一)

聊天室 几个要好的网友在聊天室里闲聊的时侯,总会遇上有些话题是不想同一聊天室内别的聊友看见的,那么聊天室支持悄悄话功能将是什分有必要的了,实现悄悄话的方法很多,现在小虎介绍一下利用session对象来实现它,用session对象来实现悄悄话,是有优缺点的,因为session对象的应用,其实就是客户端cookies的使用.如果客户端cookies不支持或关闭了,那么程序运行起来就有问题了.那么使用session对象就没好处了吗??非也,至少在编程上大大减少了工作量嘛,试想一下如果需要保存该用户的聊

聊天室实现私聊第1/4页

几个要好的网友在聊天室里闲聊的时侯,总会遇上有些话题是不想同一聊天室内别的聊友看见的,那么聊天室支持悄悄话功能将是什分有必要的了,实现悄悄话的方法很多,现在小虎介绍一下利用session对象来实现它,用session对象来实现悄悄话,是有优缺点的,因为session对象的应用,其实就是客户端cookies的使用.如果客户端cookies不支持或关闭了,那么程序运行起来就有问题了.那么使用session对象就没好处了吗??非也,至少在编程上大大减少了工作量嘛,试想一下如果需要保存该用户的聊天名字,

用ASP实现聊天室中的在线答题游戏

聊天室|在线 主要功能为:在聊天室中,每隔5分钟,向显示对话页面,发送一道题,所有用户都可答题.答对者加相应的分值.具体实现:在聊天室框架中加入一隐含帧,此帧每5分钟刷新一次.隐含帧内的ASP页内容如下:<%@ LANGUAGE=VBScript%><%Response.Expires=0%><%Dim Conn,RsApplication.Lockapplication("CanswerName")=application("answerNam

在asp聊天室里实现房间功能和用户显示

在我写下了<在asp聊天室里实现悄悄话功能>一文后,很多的朋友来信问我关于其他高级功能实现的问题.确实,例如房间.用户管理等高级功能是一个完善的聊天室所必有的功能.在这里面又以房间功能是比较难于实现的.因此我想和大家谈谈 这个问题. 我依然倾向于用数组来解决这两个问题,这并不是说不能用数据库来解决,但我们要考虑性能的问题.而且用数组有几个好处,利于排序,利于控制总的长度.在服务器内存中长驻(有利于性能的提高).我先讲一讲房间的问题,这里给出大家在两个系统 房间中切换的方法.至于自建房间的方法,

聊天室实现私聊(四)

聊天室 我曾经做过一个比较复杂的聊天室,几乎拥有BBS聊天室的所有功能,但因为是用application做的,所以比较浪费资源.我觉得用数据库做更可靠,更简单.可以设定这样的一个数据库chat,结构如下: 字段名 类型 长度 备注1.. OBJECT CHAR 10 操作对象,ALL或某人 2.. MSG CHAR 250 消息内容 3.. TIME DATETIME 发送时间 4.. SENDER CHAR 10 发送人 5.. ROOM CHAR 10 房间名,发送人所处房间 在通常情况下O

PHP聊天室技术讲解

上网聊天是时下最流行的交友方式.各大网站推出的聊天室都各具特色. 聊天室主要分为WebChat.BBSChat两种.BBSChat是基于Telnet的Tcp协议,是BBS的附设功能,需要客户端Telnet程序.WebChat则采用浏览器方式,实际上是一个多人共同使用的CGI程序.其基本原理是把每个用户的发言通过浏览器传给系统,再由系统收集处理后分发给特定用户.   WebChat一般采用Server Push或Client Pull技术.两种技术的区别在于使用不同的方式将数据分发给用户,Serv

PHP聊天室技术

PHP聊天室技术 黄国辉 1.前言   上网聊天是时下最流行的交友方式.各大网站推出的聊天室都各具特色.   聊天室主要分为WebChat.BBSChat两种.BBSChat是基于Telnet的Tcp协议,是BBS的附设功能,需要客户端Telnet程序.WebChat则采用浏览器方式,实际上是一个多人共同使用的CGI程序.其基本原理是把每个用户的发言通过浏览器传给系统,再由系统收集处理后分发给特定用户.   WebChat一般采用Server Push或Client Pull技术.两种技术的区别