下载

0下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 怎么建聊天软件

怎么建聊天软件.doc

怎么建聊天软件

吴澄辉
2017-09-28 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《怎么建聊天软件doc》,可适用于综合领域

怎么建聊天软件上网而没去过聊天室的人可谓是凤毛麟角下面我们就自己来做个最简单的聊天室。目前聊天室显示对话的方式一般有两种。一是每隔x秒就把整个对话显示区刷新一遍此方的弊端显而易见:数据传输量大且屏幕有闪烁感其二是有新的发言时才将该内容传递给客户端并添加在原有对话的尾部此法数据传输量就比较小且屏幕是平滑滚动视觉效果好。第一种方法的实现已经有很多资料介绍因此本文将介绍第二种刷新方式。设计思路:服务器端只保留最新的条发言作为缓冲区新的发言内容将最旧的发言挤出。每句发言都分配一个递增的序号。客户端最后出现的发言的序号记录在Session中。利用隐藏框架进行刷新刷新时将Session值与缓冲区的每句发言的序号进行比较如果序号大于Session值说明该发言是新的就将该发言的数据取出并将该发言的序号值赋给Session。对话显示区使用documentopen()打开后就不再关闭当隐藏框架刷新时有新数据取出并传到客户端时将这些原始数据格式化为要显示的内容(此工作可以在服务器端执行但为减轻服务器的负担就将对话的合成工作移交给客户)然后调用documentwriteln方法将发言的内容写到对话显示区的尾部。在对话显示区中放置一段自动滚屏的代码使屏幕自动向下滚动并可通过发言区的复选框来选择是否自动滚屏。实现方法:一、本程序只需要个文件即可实现:chatasp:聊天室框架文件负责初始化程序运行环境并随机分配四位数的数字做为用户名再把页面从上到下分成四部分顶、底两个框架高度为。chatfyqhtm:发言区提供输入姓名、发言的文本框及一个发言按钮和一个自动滚屏的开关(复选框)并定义在客户端执行的JavaScript:checksays()(对发言进行有效性检测)、cls()(清空对话显示区的内容)、write()(初始化对话显示区定义页面颜色、文字大小并放置滚屏代码)、sw(username)(在对话区点击人名时将人名写到发言框中)、w(un,sa,tn,dt)(将原始数据合成为完整的发言内容并添加到对话显示区的尾部)。chattasp:此文件位于顶部的隐藏框架(高度为)中定时刷新把新的发言的原始数据使用的格式输出到客户端即可调用chatfyqhtm中定义的w(un,sa,tn,dt)函数来显示出发言内容。chatsayasp:发言提交到此文件进行处理。此文件位于底部的隐藏框架中。将发言加入缓冲区后立即执行和chattasp相同的代码段将发言显示出来。(chatsayasp后面的代码和chattasp是相同的之所以不在chatsayasp后面使用ResponseRedirect"chattasp"来调用是为了加快速度因为重定向方式需要建立两次连接:发言提交是连接一次重定向时又要再连接一次效率低。)二、部分关键代码注释:初始化代码段:Application("chathh")缓冲区中最后一句发言的序号、Session("chathh")就是“设计思路”中提到的Session值用于记录客户端已显示的最后一句发言的序号:"如果该序号为空表明程序未初始化IfApplication("chathh")=""Then"定义缓冲区数组共句发言"每句发言占用个位置:序号、姓名、发言内容、原始姓名、发言时间Dimsd()ApplicationLock"将数组赋值给Application("chatsd")即:发言只保留在服务器内存中Application("chatsd")=sd"定义初始序号为Application("chathh")=ApplicationUnLockEndIf"为避免序号过大每当序号增大到时就将序号复位为IfApplication("chathh")>ThenApplicationLockApplication("chathh")=ApplicationUnLockEndIf"客户端用来记录已经显示到哪句发言的Session("chathh")"其值等于序号减去即:新来的用户可以看到原有的句发言Session("chathh")=Application("chathh")chatfyqhtm中的JavaScript函数:write():functionwrite(){使用documentopen()打开对话显示区打开后不关闭这样就可以不断向里面添加新内容parentfdocumentopen()向对话显示区中写入HTML文件头parentfdocumentwriteln("")写入样式表定义parentfdocumentwriteln("<ScriptLanguage="JavaScript">")写入自动滚屏代码(注意:此处省略的代码请参见完整的源程序)parentfdocumentwriteln("StartUp()")parentfdocumentwriteln("")parentfdocumentwriteln("【欢迎光临】红蜻蜓聊天室恭候您的光临。")将chattasp载入框架顶端的隐藏框架中执行定时刷新功能parenttlocationhref="chattasp"}chattasp定时刷新并取得最新的发言的代码:"将聊天室的对话内容的缓存取到sd数组中sd=Application("chatsd")"取得最后显示的发言的序号userhh=Session("chathh")"定义show数组用于存放要显示的发言内容Dimshow()ReDimPreserveshow()j=newuserhh="遍历缓冲区的发言内容Fori=ToStepnewuserhh=sd(i)"如果sd(i)(每句发言的序号)大于用户端最后发言的序号且发言存在就将其存入show数组Ifsd(i)>userhhAndsd(i)>ThenReDimPreserveshow(j),show(j),show(j),show(j)show(j)=sd(i)show(j)=sd(i)show(j)=sd(i)show(j)=sd(i)j=jEndIfNext"输出javascript到客户端ResponseWrite"""如果缓冲区最后一句发言的序号大于原来客户端最后一句发言的序号就将该序号赋值给这个Session("chathh")以便下次刷新时进行新的检测避免把相同的发言多次取出Ifnewuserhh>userhhThenSession("chathh")=newuserhhchatsayasp部分代码注释:"如果发言长度超过个字就截断超出部分IfLen(says)>Thensays=Left(says,)"将发言进行编码使其不支持HTML语法says=ServerHTMLEncode(says)"使发言能在客户端以JavaScript函数进行传递says=Replace(says,"","")says=Replace(says,"","")says=Replace(says,Chr(),""Chr())ApplicationLock"读出缓冲区的内容到sd中sd=Application("chatsd")"取出当前缓冲区最后一句发言的序号hh=Application("chathh")"使这个序号递增Application("chathh")=hhDimnewsd()j="将原缓冲区的最旧的一句发言去掉Fori=ToStepnewsd(j)=sd(i)newsd(j)=sd(i)newsd(j)=sd(i)newsd(j)=sd(i)newsd(j)=sd(i)j=jNext"将这次发言的内容添加到最后newsd()=hhnewsd()=unnewsd()=saysnewsd()=usernamenewsd()=sj"把新的发言内容放到缓冲区中Application("chatsd")=newsdsd=newsdApplicationUnLock

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/6

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利