2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > ASP + SQL Server聊天室设计实例

ASP + SQL Server聊天室设计实例

时间:2020-04-19 18:03:36

相关推荐

ASP + SQL Server聊天室设计实例

ASP + SQL Server聊天室设计实例

目 录

第一章:绪论

1.1 设计思想

1.2 开发工具和相关技术简介

第二章:聊天室总体分析和设计

2.1 聊天室的运行原理

2.2 聊天室的功能

2.3 聊天室的页面结构设计

2.4 聊天室的程序结构设计

2.5 数据库结构设计

第三章:聊天室的详细设计

1. 变量说明

2. 聊天室的核心引擎(全局聊天消息分发引擎)设计

3. 用户客户端聊天信息输入与发送模块设计

4. 用户客户端全局聊天信息接收与显示模块设计

5. 全局聊天消息缓冲

6. 实例聊天室列表

7. 聊天室在线用户列表

8. 表情图释索引表

9. 聊天用户个人信息保存模块

10. 聊天室显示面板属性个性化设置模块

10.1 聊天对象选择功能

10.2 聊天者名字修改功能

10.3 公聊私聊模式切换功能

10.4 文字背景色前景色设置功能

10.5 聊天面板屏幕显示字体设置

10.6 自动滚屏设置功能

11. 登陆聊天室模块

12. 退出聊天室模块

第四章:聊天室运行环境构架与说明

4.1 运行环境要求

4.2 运行环境构建

4.3 聊天流程说明

第五章:参考文献

附录:聊天室源代码

第 一 章 绪论

在Internet(互连网)飞速发展的今天,上网成为越来越多人们的选择。有关的网络技术也层出不穷。现今活跃在WEB站点中的ASP就是近年才发展起来的一项新型技术。ASP功能强大、本领高强,利用ASP功能时几乎没有什么限制,可以实现动态页面。本文主要介绍了ASP技术相关的基础知识,并探讨了利用ASP + SQL server 建立聊天室的设计思想、方法及设计过程,详细地分析了各个模块的功能及实现方法。本文所实现的聊天室具有良好的程序结构和人机交互界面,通用性强,可应用于不同需求的网站。

1.1设计思想

在互联网上,传统的网站或用户都使用类似于Email(电子邮件)的形式互相发送信息来进行一系列的交流.但这种异步交互的办事效率可见是很低的.为提高效率,让用户之间能达到实时交互的目的,所以出现了可以实时交流信息的聊天室,来满足用户的需求.

1.2 开发工具和相关技术简介

1.2.1 ASP简介

Active Server Pages (ASP) 是服务器端的脚本编写环境,可用它来创建动态 Web 页或生成功能强大的 Web 应用程序。ASP 页是包括 HTML 标记、文本和脚本命令的文件。ASP 页可调用 ActiveX 组件来执行任务,例如连接到数据库或进行商务计算。通过 ASP,可为您的 Web 页添加交互内容或用 HTML 页构成整个 Web 应用程序,这些应用程序使用 HTML 页作为您的客户的界面。

ASP的特点:

ASP可以和HTML或其它脚本语言(VBScript,JavaScript)相互嵌套

ASP是一种在WEB服务器端运行的脚本语言,程序代码安全保密

ASP以对象为基础,因此可以使用ActiveX控件继续扩充其功能

ASP内置ADO组件,因此可以轻松的存取各种数据库

ASP可以将运行结果以HTML的格式传送至客户端浏览器,因而可以适用与各种浏览器

制作本聊天室, 服务器端我们使用的是 VBScript 脚本 , 客户端我们使用功能强大的javascript脚本 实现BS 交互.

1.2.2 SQL server 2000简介

SQL Server 2000 是一个杰出的数据库平台,可用于大型联机事务处理数据仓库以及电子商务等,特别是对XML,HTTP 的支持,以及在WEB ,数据仓库服务中的应用,而且存取运行速度远远高于 Access 等小型数据库. 所以很适合用于实时性要求比较高的应用程序, 本聊天室因为实时性要求比较高,所以使用SQL server2000 作为数据库,以获得高效的性能.

1.2.3 JavaScript简介

Java Script是由Sun公司及网景Netscape公司开发的。它可以让你设计交互的网页内容,但不能单独执行,必须在浏览器或服务器上执行。本文就是他在客户浏览器上的应用.

1.2.4 DHTML(动态HTML) 简介

传统的HTML是静态的,当它被加载到浏览器后,它只像一个画面,怎么看也不会发生变化,而动态HTML则意味着Web页面对用户有响应,即,动态HTML能自动变化。

1.2.5 Cookie 技术简介

Cookies是为了弥补HTML的一个缺陷而产生的。HTML是一种无记忆的协议,也就是说用户目前正在浏览的主页对在此之前浏览过的主页没有丝毫记忆和了解。而实际的需要可能是希望浏览器能够记住一些信息,而这些信息却不希望让使用者看到,比如说可能是一些用户的身份信息,因此这些信息是不能以参数的形式传送的。这个需求由HTML本身无法解决,于是引入了Cookies的概念,也就是由WebServer向浏览器写入一些信息,这些信息用户无法看到,当浏览器网站的其他主页发出GET请求时把此Cookies信息也会发送过去,供该主页使用,这样就实现了一定程度上的HTML的记忆能力。

本聊天室就是利用Cookie来存取一些用户的个人配置信息,以减轻服务器运行负担。

第 二 章 聊天室总体分析和设计

2.1 聊天室运行原理

聊天室最基本的原理就是: 从客户端收集消息,然后 通过服务器端消息分发程序中转,将全局消息发送给的所有用户. 其原理图如下:

图(1)

2.2 聊天室的功能

聊天室支持公聊、私聊、每个用户都有代表自己的昵称,可在用户在线列表中选择聊天对象。聊天消息中可插入表情图释,采用主动刷新机制,确保不会掉线。精心设计的消息分发引擎, 在没有新信息的时候主窗口看不到刷新,尽可能的减小服务器负担。用户类型分成:游客(性别未知),美女和帅哥 3种。且每个用户在一台电脑上只能进一个聊天室。

2.3 聊天室的页面结构设计

本聊天室分为 4 块区域,即 公聊区,私聊区,聊天面板,用户列表。采用 框架形式 的页面结构,以便在一个IE窗口中 显示多个WEB页面,使之构成一个完整实用的聊天室界面。

如图所示:

图(2)

由以下几个asp文件组成此界面:

chat.asp :由框架组成分别包含: chatboard, singlechat, userlist, controlboard 几个框架(Frame).

chatboard.asp : 公聊区页面

singlechat.asp : 私聊区页面

controlboard.asp : 控制版

userlist.asp : 用户列表

2.4 聊天室的程序结构设计

本聊天室为了尽可能达到通用性,所有将聊天室抽象成一个聊天室模块!只要设置不同的聊天室名字,就可以建立独立的聊天室。应用于网站时,可以由网站管理员建立,也可以让用户自己建立。

下面介绍一下组成本聊天室的11个功能模块

13. 聊天室的核心引擎:全局聊天消息分发引擎

14. 用户客户端聊天信息输入与发送模块

15. 用户客户端全局聊天信息接收与显示模块

16. 全局聊天消息缓冲

17. 实例聊天室列表

18. 聊天室在线用户列表

19. 表情图释索引表

20. 聊天用户个人信息保存模块

21. 聊天室显示属性个性化设置模块

22. 登陆聊天室模块

23. 退出聊天室模块

以下是 本聊天室的程序组成结构图:

为用户分配资源 释放该用户的资源

分发信息 发送信息

发出登陆请求 发出退出请求

图(3)

2.5 数据库结构设计

本聊天室 中的2个模块的数据是 存放在数据库中的。1个是 在线用户的列表模块,另一个是实例聊天室列表模块。

2.5.1 实例聊天室列表模块

1. 表名:ChatRoomlist

2. 结构:

字段名字段类型字段字节数

id int 4 (记录唯一表示ID)

Roomname varchar 50 (实例聊天室名字)

creater varchar 50 (聊天室的建立者)

createtime smalldatetime 4 (建立时间)

state varchar 10 (聊天室状态,包括:开启和关闭)

memo varchar 100 (备注)

2.5.2 在线用户的列表模块表结构

1.表名: ChatRoomUser

2.结构

字段名字段类型字段字节数

id int 4 (记录唯一表示ID)

nickname varchar 50 (用户昵称)

sex varchar 10 (用户性别)

logintime smalldatetime 4 (登陆聊天室的时间)

RoomAppName varchar 50 (当前所在聊天室的程序内部名字)

TrueRoomNamevarchar 50 (当前所在聊天室的实例名字)

JoinIP varchar 50 (用户进入聊天室时所用的IP)

SessionID varchar 50 (用户进入聊天室时,服务器分配个用户

的SessionID(用户唯一表示ID))

第 三 章 聊天室的详细设计

3.1 变量说明

l 服务器端全局变量

在 ASP 中, 全局变量是通过 Application 对象 保存的, 他从Web 服务器 启动开始 到 关闭之前 一直存在, 所以可以被程序共享访问

在我们的聊天室里 使用了以下这些变量

1. application(RoomAppName) (保存信息高速缓冲, RoomAppName 是一个抽象变量,根据不同的聊天室,设置不同的高速缓冲)

2. application(RoomAppName &"_MsgHeadPointer") '消息缓冲环结构中的头指针[这里用数组下标标识]

3. application(RoomAppName &"_MsgTailPointer") '消息缓冲环结构中尾指针[这里用数组下标标识]

4. application(RoomAppName &"_Msg_ID") '消息缓冲中 标识消息记录唯一的递增变量

5. application("Faces") ‘图释索引列表, 用于图释选择和定位

l 服务器端局部变量

ASP 里有 3 种 局部变量: 1. 页面使用的变量

2. 用户从本网站开始到离开期间使用的变量

3. 保存在 每个用户客户端的变量

ü 页面使用的变量

1. RoomId : 标识聊天室的唯一ID

2. chatUsername : 在聊天室里用的用户昵称

3. UserSex : 用户性别

4. RoomAppName : 用于标识各个聊天室的唯一名字, 由 字符串 "ChatRoom_" 和 RoomID 拼接而成

ü 用户从本网站开始到离开期间使用的变量 (使用session对象实现)

1. session.Contents("Pass")

布尔变量,在用户退出聊天室时,用于用户的合法性判断

2. session("RoomAppName")

保存当前用户所在的聊天室唯一标识名

3. session("ChatNickName")

保存当前用户在聊天室里的昵称

4. session("UserSex")

保存当前用户的性别

ü 保存在 每个用户客户端的变量 (使用Cookie技术实现)

1. response.Cookies(RoomAppName)("ChatNickName")

当前用户在聊天室里的昵称

2. response.Cookies(RoomAppName)("ChatRoomTrueName")

当前用户所在的聊天室真正的名字(可以重复)

3. response.Cookies(RoomAppName)("ChatRoomAppName")

当前用户所在的聊天室唯一标识名

4. response.Cookies(RoomAppName)("MsgLastLinePointer") 标识用户从消息缓冲中 接收的最后一条信息的 消息id, 用于判断用户客户端消息的更新

l 客户端局部变量

本聊天室 在客户端 使用了一些变量来 保存和判别 每个用户在聊天室中的个性化设置 和 聊天信息的接收和显示(都是javascript 在客户断定义的变量和数组)

1. FontBold : 聊天内容显示字体是否为粗体

2. FontItalic : 聊天内容显示字体是否为斜体

3. PrivateChat : 聊天模式是否为私聊模式

4. SpliteScreen : 聊天内容显示方式是否分屏

5. ScrollSreen : 聊天内容显示时是否自动滚屏

6. FrontColor : 聊天内容显示字体的前景色

7. BackColor : 聊天内容显示字体的背景色

8. selfname : 用户自己的昵称

9. TalkerArray : 接收更新消息时 保存说话者字段的1维数组

10. TalkToArray : 接收更新消息时 保存说话对象字段的1维数组

11. MsgArray : 接收更新消息时 聊天内容字段的1维数组

12. SaytimeArray : 接收更新消息时 说话时间字段的1维数组

l 系统常数

1. RoomMaxUser : 每个聊天室的最大用户数

2. MaxMsgLines : 消息高速缓冲数组矩阵的最大行数,

3. MaxMsgColumn : 消息高速缓冲数组矩阵的最大列数

4. MaxFaces : 图释列表的 最大图释个数

5. FacePath : 图释文件的相对存放路径

3.2 聊天室的核心引擎(全局聊天消息分发引擎)设计

首先,我们介绍一下使聊天室正常运转的核心引擎―――全局聊天消息分发引擎。他就像人的心脏运送血液那样,在聊天系统中运送着用户的信息,使整个聊天交互过程得以正常运转。

l 功能说明:接收用户发送到服务器的聊天信息,向用户发送在聊天室中参与聊天的所有用户的全局聊天信息。

l 接收发送模式:客户端主动模式

l 引擎组成构造:

本引擎由2个asp脚本文件:

接收数据脚本文件(receivedengine.asp)和发送数据脚本文件(Refreshengine.asp)

再通过 一个 全局信息高速缓冲 做为共享数据区 ,实现从客户端获取个人消息并发送全局消息。

l 引擎原理图

图(4)

l 核心算法与重点代码的设计

u 全局信息高速缓冲的实现

我们用一个二维数组 构成一张二维表, 缓冲聊天内容, 其行 存储某一用户对另一个用户的一条聊天记录 ,其列存储 记录中的各个字段.

其表结构如下:

高速缓冲二维表

在这里我们使用 循环列队(环)这种数据结构形式实现高速缓冲的运转(如图5所示),此线性表首尾相接,由2个指针互相协调控制, 一个称为 front(列队头,在这里我们使用 Headpointer标识),另一个称为rear(列队尾, 在这里我们使用 Tailpointer标识);

图 5 (循环列队)

a:初始状态 b:添加数据 c:删除数据

其控制变量有: MsgHeadPointer 、MsgTailPointer、Msg_ID(变量说明见3.1)

其操作包括:

1. 创建一个空的缓冲

CreateCache(MaxLines , MaxColumn , RoomAppName)

2. 初始化一个缓冲

Init_Cache(cache , MaxLines , MaxColumn , RoomAppName)

3. 如果缓冲为空,则返回 TRUE,否则返回 FALSE

Cache _Is_Empty(cache , RoomAppName)

4. 向队列中添加一条聊天记录

AddToCache(cache , MaxLines , RoomAppName , Talker, TalkTo , Msg , ChatMethod)

5. 获取缓冲中新的全局聊天消息

GetNewestMsg(cache , MaxLines , RoomAppName )

具体函数程序,请参考附录!

由于高速缓冲在整个聊天系统运行中是非常重要的共享数据区,所以我们使用Application对象保存高速缓冲数组.

u 数据接收实现

数据接收模块, 接收用户从客户端通过表单提交上来的聊天信息, 然后把他添加进高速缓冲. 主要利用ASP的 Request 对象截获表单数据,具体程序如下:

‘用户输入聊天内容 并发送到服务器端

略………在3.3详细介绍

‘-获取用户提交上来的信息

RoomAppName = request("RoomAppName") ‘发送到目的聊天室的唯一标识名

Talker = request("Talker") ‘说话者

TalkTo = request("TalkTo") ‘说话对象

Msg = Server.HTMLEncode(request("chatmsgbox")) ‘聊天内容

ChatMethod = request("private") '公聊=off 或 私聊=on

‘加入当前用户信息到高速缓冲(MaxLines是系统常数 参考3.1)

1. AddToCache(cache , MaxLines , RoomAppName , Talker, TalkTo , Msg , ChatMethod)

u 数据发送实现

数据发送模块, 由客户端浏览器每隔5秒钟, 主动刷新服务器端的数据发送页面, 发送程序把当前用户的所需的全局聊天信息从高速缓冲中取出并发送给客户端. 主要应用了 ASP 的Request 和 Cookie 技术获取 当前用户的在聊天室中的系统状态信息, 来判断发送的信息内容, 应用Application对象从高速缓冲中读取信息.具体程序如下:

RoomAppName = request("RoomName") ‘获取更新信息的目的聊天室的唯一标识名

'-----------------获取用户信息(变量说明请参考 3.1)-----------------------

ChatNickName = request.Cookies(RoomAppName)("ChatNickName")

ChatRoomTrueName = request.Cookies(RoomAppName)("ChatRoomTrueName")

ChatRoomAppName = request.Cookies(RoomAppName)("ChatRoomAppName")

MsgLastLinePos = CLng(request.Cookies(RoomAppName)("MsgLastLinePointer"))

'--------------------------------------------------------------------------------

‘发送数据给 客户端

’获得程序生成的 需更新记录的 javascript消息数组

TheNewstMsg = GetNewestMsg(application(RoomAppName),MaxMsgLines,RoomAppName )

‘显示新的全局聊天信息到客户端

略………在3.4详细介绍

3.3 用户客户端聊天信息输入与发送模块设计

l 功能说明: 此模块用于 用户输入聊天内容,并发送到聊天室里, 即实现在聊天室中发言的功能

l 操作流程图:

l 代码的设计:

3.4 用户客户端全局聊天信息接收与显示模块设计

3.5 全局聊天消息高速缓冲

3.6 实例聊天室列表

3.7 聊天室在线用户列表

3.8 表情图释索引表

3.9 聊天用户个人信息保存模块

3.10 聊天室显示面板属性个性化设置模块

3.10.1 聊天对象选择功能

3.10.1 聊天者名字修改功能

3.10.1 公聊私聊模式切换功能

3.10.1 文字背景色前景色设置功能

3.10.1 聊天面板屏幕显示字体设置

3.10.1 自动滚屏设置功能

3.11 登陆聊天室模块

3.12 退出聊天室模块

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。