数据库聊天室的“无刷新”技术要点

聊天室|数据|数据库|刷新|无刷新

聊天室是网络实时交互的最常应用之一。聊天室的制作要解决好以下问题。
1、谁在发言
2、讲给谁听
3、讲些什么
与ICQ不同,ICQ 的数据流是一对一的关系。只要解决好上面三个问题就
可以实现。
聊天室由于存在一对多、多对一、一对一等多种数据关系,因此就有一个
数据的存放问题。
ASP 聊天室的数据存放一般有三种形式: 一是用全局变量Application 和
Session对象。这种形式速度快效果好,但系统资源消耗太大。二是应用读
写数据库实现。这种方法简明但服务器频繁读写数据据库很累。第三种可用
读写TXT文件完成。适合简单的聊天室。
三种方法都有一个共性的特点:客户端要获取新的聊天数据,必需刷新
调用。刷新时间过短,屏幕晃动厉害,刷新时间过长,等待时间太多感速度
太慢。于是人们分别用触发刷新与自动刷新结合从感觉上得到改善。二是利
用隐藏帧进行刷新再把内容加在显示帧上,形成所谓“无刷新”聊天室,解
决了屏幕晃动问题。
“无刷新”聊天室要解决的技术问题有:
一、如何判断新数据
二、新数据的提取
三、如何让客户断在有新数据时能及时更新
以上一、二用Application很容易实现,但第三个问题不容易解决。用数据
库做聊天室,第三个问题相对容易,但第一、二个问题要费点精神。笔者用
数据库做的聊天室采用了“无刷新”技术,没有用一个Application,主要
的技术要点是:
在数据库中另设置只有一个字段的表,字段名:BS
用户每次登陆读一次BS 的值。 设一个Session别作为每一个具体用户的
当前发言次数,初始为 BS-1。
用户每发言一次使 BS + 1(Session 值不此时不加,形成Session与BS差)
在隐性刷新帧上判断:
如果 BS 与 Session 有差,则读数据库将新数据读出并在显示帧显示。
Session+1 表示新数据已经读出,不再重读。
反复此过程,直到所有新数据据读出并显示。此时 BS = Session
上述方法解决了上面讲的 判断新数据和新数据的提取的问题。由于新数据
本身没有任何变化,依然原样存放在数据库中,客户端无论时间差多大,只
要自身的Session与BS有差,一当读库,差多少多多少条记录,解决了客户端
刷新差异带来的不显示问题。
以上方法,当然也可以用Application来设置 BS。还有一但BS 到了一定值
时(看同时发言人数而定),要重置为 1 。
以上方法在 IIS 4 平台,局域网、因特网通过。

                             南 风

时间: 2022-12-13

数据库聊天室的“无刷新”技术要点的相关文章

XMLHTTP+Javascript+Asp写得聊天室,无刷新实现(一)

javascript|xml|聊天室|刷新|无刷新 使用XML.而无须不断刷新*.ASP.无刷新实现发言的逐条显示.使用Application变量存储聊天记录,所以要需要建立一个虚拟目录服务器端不需要支持XML,只要支持ASP和能建立虚拟目录就可以了. 以下代码在nt4.0+iis4.0上通过.我估计在你的win2000下也差不多吧.如果有问题,请多多赐教:netnice@chinaok.net ##########index.asp##############################

XMLHTTP+Javascript+Asp写得聊天室,无刷新实现(四)

javascript|xml|聊天室|刷新|无刷新 ########say.asp############## <% Option Explicit dim F,T,sC,cL,E,W,sJResponse.ContentType="text/xml"F=Request.Form ("F")T=Request.Form ("T") sC=Request.Form ("sC")cL=Request.Form ("

XMLHTTP+Javascript+Asp写得聊天室,无刷新实现(五)

javascript|xml|聊天室|刷新|无刷新 这是最重要的一个了.也很大.我的习惯不太好.没有加详细的注释,认真看吧.#########send.asp##############<html> <head><META content="text/html; charset=gb2312" http-equiv=Content-Type> <meta http-equiv='pragma' content='no-cache'><

XMLHTTP+Javascript+Asp写得聊天室,无刷新实现(三)

javascript|xml|聊天室|刷新|无刷新 ################reload.asp############## <%'Response.ContentType="text/xml"Response.Write "<?xml version=""1.0"" encoding=""GB2312""?>" Response.Write "<

XMLHTTP+Javascript+Asp写得聊天室,无刷新实现(二)

javascript|xml|聊天室|刷新|无刷新 ################main.asp###################### <%Response.Buffer=trueResponse.Expires=0userName=Request.Form("username")if username="" then Response.Redirect "index.asp" session("u_name"

XMLHTTP+&amp;#106avascript+Asp写得聊天室,无刷新实现。原创代码放送!服务器支持Asp即可使用(二)

xml|服务器|聊天室|刷新|无刷新|原创 ################main.asp###################### <%Response.Buffer=trueResponse.Expires=0userName=Request.Form("username")if username="" then Response.Redirect "index.asp"session("u_name")=use

XMLHTTP+Javascript+Asp写得聊天室,无刷新实现(六)

#############续send.asp################# var oRDom=new ActiveXObject("Microsoft.XMLDOM");oRDom.async=false;var Path="reload.asp";var tCok;function Clock(){cRld++;if (cRld>10){cRld=1;GetXmlData();}clearTimeout(tCok);tCok=setTimeout(&q

XMLHTTP+Javascript+Asp写得聊天室,无刷新实现。原创代码放送!服务器支持Asp即

########say.asp##############<% Option Explicit dim F,T,sC,cL,E,W,sJResponse.ContentType="text/xml"F=Request.Form ("F")T=Request.Form ("T")sC=Request.Form ("sC")cL=Request.Form ("cL")E=Request.Form(&quo

AJAX技术vs传统的ASP无刷新技术

ajax|刷新|无刷新    ajax技术的优势到底在哪里呢,不明白.看一个最简单的例子,假设用户注册的时候,判断用户输入的名字是否已经被占用,假设输入数字1:显示"OK"(表示正确,可以使用):输入其他字符:显示"Error" (表示错误,已经被占用). 用ajax技术实现 代码: t.htm <script> function f(){ var req =new ActiveXObject("Microsoft.XMLHTTP")