欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

聊天室开发详解(四)

程序员文章站 2022-07-01 19:36:04
    最后,我们把上面编写的程序上传到网站空间,在客户端用打开时,我们见到了平常聊天室一样的用户登陆界面。我们于是输入用户名及密码,按发送时,我们所输入的资料便会暗中...

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

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

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

技术交流 永无止境