聊天室实现私聊(二)

聊天室

聊天室程序是一个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-08-25 11:55:34

聊天室实现私聊(二)的相关文章

聊天室实现私聊(四)

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

我自己写的聊天室源代码(二)

聊天室|源代码 <%'初始登录页,default.asp%><html> <head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta name="GENERATOR" content="Microsoft FrontPage 3.0"><title>登录聊天

聊天室实现私聊(一)

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

聊天室实现私聊(三)

聊天室 上两节介绍了如何处理聊天室内的谈话内容以及悄悄话的特殊处理,至此.我们去看看谈话内容是如何在客户端显示出来的.请先看看我们的显示对话文件(top.asp) *top.asp <% @language="vbscript" %><%Response.Expires=0'response.buffer=true%><meta http-equiv="refresh" content="2.5"><bo

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

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

聊天室php&amp;mysql(二)

//第二页面 name="frame2.php" <? include "../signup/mysql.php"; header("Expires: Sun, 28 Dec 1997 09:32:45 GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("

PHP设计聊天室步步通

聊天室|设计 聊天室可以采用完全自由的方式运行,你可以随意输入呢称,不用密码,不保存你的聊天状态,优点是:自由,非常适合于游客!另外一个方法是注册聊天室,每个进入聊天室的人都要输入自己的用户名和密码才能进入!优点:充分体现个性,非常适合于老朋友,他们的呢称不会被人恶意侵占使用.我的聊天室使用注册方法! 注册通常采用2种方法: 1.先注册然后进入聊天 2.自动注册 然后在里面修改自己的资料!我采用第2种方法!!每个新进入的聊友的用户名会被自动保存到注册到数据库内,下次登陆必须输入准确的密码才能进入

聊天室技术 - 密谈的实现

聊天室 聊天室技术 - 密谈的实现 每个聊天室都提供了密谈功能,来为那些需要私下里进行交流的聊友提供方便,这 里把我的聊天室实现私聊的方法介绍如下: 1 对发送信息的处理 每句私聊都要显示在自己和私聊对象的屏幕上,而其他人不能够看到.这里先对发 言内容进行处理,然后再保存到发言文件里面! //$split为分隔符号 messagesend.php <? //判断是否私聊发言 if($secret == "on") {     //在发言前面加上标记<!--+私聊标记+对象+

Java实现的c/s的聊天室

根据马士兵老师聊天室程序进行优化,同时增加聊天者之间的交互. 同时增加服务端会为每一个客户端增加一个交互窗口,让服务器可以和每一个客户端交互! 服务端代码 1.import java.net.*; 2.import java.util.*; 3.import java.io.*; 4.import java.awt.*; 5.import java.awt.event.*; 6.import javax.swing.*; 7. 8.import javax.swing.JFrame; 9. 10