聊天室建设详解四

当我们把上面的程序保存在具有执行权限的服务器目录中,在客户端用浏览器打开时,我们见到了平常聊天室一样的用户登陆界面。我们于是输入用户名及密码,按发送时,我们所输入的资料便会暗中存入用户数据库中。接着便出现了发言筐,我们试着输入一句话,点发言按钮,这时,我们的发言便会带着我们所输入的话,我们所选择的说话对象,我们所选择的颜色以及表情写入发言数据库中。但是,发言之后,我们并没有发现任何语句出现在屏幕上,那是因为:这个程序本身负责的纯粹是把数据库写入数据库,他不会向客户端返回任何东西,除非你的输入是错误的。
  聊天室还需要一个重要的程序,这个程序自动的、不断的读取数据库中最新的记录,把他显示在所有用户的浏览器上。这个程序与别的任何程序没有任何关系,他的唯一的任务是读取发言数据库中的数据,把他显示出来,他不管客户是否输入发言,不管客户对谁说话,不管客户选择什么表情与颜色。当这个聊天室即使没有一个人说话,这个程序也是不断的读取这个数据库,每N秒钟刷新一次,这个N是由编程者决定的。
  由此,我们可知:登陆_发言部分与自动刷新部分是没有任何联系的。
  在分析范例程序之前,我们最好来分析一下几点:
  1、在我们往数据库中写入数据库时,记录是不断往数据表的尾部增加的,因此,我们必须知道哪一句话是最新的,哪一句话在前面说的,我们知道,在MSACCESS数据库表中,有一个自动编号的字段ID,这个字段非常有用,ID最大的记录是最新输入的记录,每添加一个记录,ID自动加1,由此,我们可通过ID来对用户的话进行从新到旧的、一句一句的排序输出。我们知道,在 SQL 的SELECT 语中有一个 ORDER BY的子句,他按一列或多列对结果进行升序或降序排序。如果我们不用ORDER BY 字句,那SELECT 默认为升序输出,那我们会看到,最旧的发言总是在前面显示,而最新的语句则跑到最后面去,那当然不是我们所希望的。
  2、再一点,那就是用户不断的往数据库中输入语句,数据库将会变得越来越大,而我们为了速度,我们不能也不必要读取全部的记录把所有的话显示出来,我们只需要看到最新的N句话比如最新的50句话就够了。如何实现上面两点,且来看看范例程序:

我们来分析一下下面的程序:chatview.asp

<%Response.Buffer=true%>                 设置缓存为真

<%                            指定数据库      
Set Conn=Server.CreateObject("ADODB.Connection")
Connstr="DBQ="+server.mappath("chat.mdb")+";DRIVER={Microsoft Access Driver (*.mdb)};"
Conn.Open connstr
%>

<%
sql="SELECT * FROM 聊天表 ORDER BY ID DESC"        降序输出查询结果    
Set rootRs=conn.Execute(sql)
set name=rootrs("姓名")                  从数据库中获取姓名、说话、颜色、表情等
set word=rootrs("说话")
set colo=rootrs("颜色")
set face=rootrs("表情")
set who=rootrs("说话对象")
%>

<%i=0%>                          定义输出记录数 i

<%Do While Not rootRs.Eof and i<=50%>         显示50句话,包括姓名、话语、颜色、表情等
<%i=i+1%>
<table border='0' cellpadding='0' cellspacing='0' width='85%'><tr>
<td width='100%' bgcolor='#C0C0C0'></td></tr><tr><td width='100%'>
<font color='#0000FF'><strong><%=name%></font></strong><font color='#008080'><%=face%></font><font color='#0000FF'><strong><%=who%>说:
</font></strong><font color='<%=colo%>'><%=word%>
</font></td></tr><tr>
<td width='100%' bgcolor='#C0C0C0'></td></tr></table><br>
<%rootRs.MoveNext
Loop%>

<meta http-equiv="refresh" content="4">           每四秒钟刷新一次

请把此程序存为chatview.asp

时间: 2024-12-03 17:28:52

聊天室建设详解四的相关文章

聊天室建设详解一

一位精通程式设计的大师,在每开发一个项目的时候,往往要经过非常严密的计划,十分严格的求证,否则,辛辛苦苦开发的程序一旦中途发现问题,那往往都是前功尽弃,从头开始.特别是开发一个大型项目,那计划与求证过程比编写程序过程更为重要. 然而,如果我们是一位程式设计的初学者,要让我们开发一个例程,我们的做法又往往与上面的做法相反.往往从最简单的实例开始,实现最初步的功能,然后在简单的基础上不断对程序加以改进.完善,使其功能不断增加,发展,强大. 我自己有一个习惯:在设计一些中小程式时,我喜欢花更大的精力去

聊天室建设详解二

接下来,我们开始讲述建设过程,首先,我们要规划,要大概了解使用多少个数据库表,这些数据库表应该有哪些字段:摆在我们面前的就已经是必须存在的几个数据库表:1.存储用户信息的用户表,2.存储发言信息的发言表,3.存储在线用户信息的在线用户表等. 建议使用ACCESS或SQL SERVER 数据库,建立一个ACCESS数据库实在是太简单了,就象建立一个EXCEL表格差不多,你可以不必了解太多的数据库知识. 我们先建立chat.mdb数据库包含用户表及聊天表:如下: 用户表: ID IP 姓名 性别 密

聊天室建设详解三

接下来,我们开始对用户登陆与发言实例程序进行分析:chatadd1.asp 1.用户登陆 <%Response.Buffer=true%> 指定缓存为真<body bgcolor="#F8E17A"><%if Request("name")="" then%> 判断用户名是否为空,以判断用户是否在聊天界面<%addr=Request("REMOTE_ADDR")%> 获得用户IP

聊天室建设详解五

 我们试着在客户端用浏览器打开chatview.asp,我们果然看到自动刷新的页面,不错吧!下面,我们就要考虑如何把发言部分与刷新部分在同一个页面上显示:那需要用到框架. 框架,那是最简单不过的了,直接用Frontpage即可构建.请看如下代码: <frameset rows="*,90" frameborder="0"><frame name="main" scrolling="yes" src="

IOS中Json解析实例方法详解(四种方法)_IOS

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http://www.bejson.com/"网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的iOS版本,可以使用第三方库来解析Json. 本文将介绍Tou

Masonry自动布局详解四:整体动画更新约束

Masonry自动布局详解四:整体动画更新约束 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万大量代码的冗余,对维护和开发的效率都很低. 笔者在这里介绍纯代码自动布局的第三方库:Masonry.这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的. 效果图 本节详解Masonry的以动画的形式更新约束的基本用法,先看看效果图

kafka详解四:Kafka的设计思想、理念

     本节主要从整体角度介绍Kafka的设计思想,其中的每个理念都可以深入研究,以后我可能会发专题文章做深入介绍,在这里只做较概括的描述以便大家更好的理解Kafka的独特之处.本节主要涉及到如下主要内容: Kafka设计基本思想 Kafka中的数据压缩 Kafka消息转运过程中的可靠性 Kafka集群镜像复制 Kafka 备份机制 一.kafka由来      由于对JMS日常管理的过度开支和传统JMS可扩展性方面的局限,LinkedIn(www.linkedin.com)开发了Kafka以

Android编程实现泡泡聊天界面实例详解(附源码)_Android

本文实例讲述了Android编程实现泡泡聊天界面的方法.分享给大家供大家参考,具体如下: 昨天写了个界面,实现了Android泡泡聊天界面.运行结果如下,点击发送按钮,屏幕就显示Text的内容. 我也是在网上的一份源码的基础上更改的,整个泡泡界面的实现要点: (1)主界面其实就是一个List View (2)文字显示界面其实就使用了android:background="@drawable/incoming"这个东西.背景图片的格式是xxx.9.png,专门用来缩放的,不然显示效果非常

javascript中类的定义方式详解(四种方式)_javascript技巧

本文实例讲述了javascript中类的定义方式.分享给大家供大家参考,具体如下: 类的定义包括四种方式: 1.工厂方式 function createCar(name,color,price){ var tempcar=new Object; tempcar.name=name; tempcar.color=color; tempcar.price=price; tempcar.getName=function(){ document.write(this.name+"-----"+