|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
在主页上拥有一个聊天室,会给你的主页空间增添许多情趣,特殊是在 Intranet 或局域网内更是乐趣无穷。然而传统的CGI编程是一件头疼的事,随着 ASP技术的流行,制作主页聊天室不再是件可怕的事情。跟我一步步的来吧,拥有你自己的聊天室空间。 一、主页聊天室的原理 1、主页聊天室其实并不神秘,名成员间相互通信的方法并非像所表现的那样建立直接的连接,而是通过web服务器作为中介。这时在web服务器更像一个大信箱,里面装着很多信,有大家都可以看的公共信,也有私人信件(既静静话),感觉上就像真的相互是在直接通信相同。 对于ASP 的基本原理就不再叙述了。 构筑聊天室的精髓思想就是其内部对象 Application和Session的应用。Application 对象对应了一个全局全域变量的概念,随 服务器的启动关闭而创建删除。任何一个客户任何时候改变了它,都会引起改变,所以在聊天[室程序中用Application 对象来保存公共信息。Session 对象对应了一个客户的局部局域的概念,随客户开始进入站点页面时创建,各个客户拥有一个唯一的Session ID( 此ID保存在客户机Cookie中因此要求浏览器答应接受Cookie ), Session变量的改变对各客户是独立的,而且它可以保存同一站战点同一客户不同网页上的数据,所以在聊天室程序中用Session对象来保存聊天成员专用信息,如聊天代号、静静话等。 用ASP构筑聊天室充分体现了ASP和CGI程序的差别。CGI程序中,为每一个客户连接创建一个进程,其对资源的耗费是很大的。而ASP中Application 对象保存自己数据,共用一个进程空间,因此ASP的效率是很高的。 二、基础框架的构筑 一共需要两个页面,一个用作登录界面,一个作主聊天页面。登录页面login.asp很简朴,就是一个from 表单,提交后把聊天代号等信息送给Session变量Session("name\\\'),然后重导航(Response. Redirect mainchat.asp)到主页面mainchat.asp。主聊天页面由两个frame 组成: frame1中放words.asp页面,用于显示聊天内容。frame2中放chat.asp 页面,用于发送聊天信息。 2、设置Application和Session 对象 使用Application("show" )存放公共信息,用Session("name")存放聊天室代号,这是很自然的。静静话用什么存放呢?这里用了一个很巧妙的方式:用Application(Session("name")存放静静话信息!每一个聊天代号都对应一个Application变量 ,在显示页面中用〈% = Application(Session("name")%>将显示属于本代号的静静话. 3、显示页面words.asp的要害语句: <HTML> <META htpp-equiv="refresh" content="10">// 每10秒钟刷新一次页面 ... <%=Application(Session("name"))%>// 显示静静话,假如有的话 ... <%=Application("show")%>//显示公共对话信息 ... </HTML> 4、chat.asp 主要实现消息发送,其中包括一个form表单,以填入要说的话及静静话接受者(为空表示公共信息),提交给chat.asp 自身,将表单数据送到各自的变量中去:要发送的消息到Application("show"),静静话接收者送到Applicatio(Secret)中。Chat.asp 的要害语句: ... Talk=Trim(Request.From("txbox")// 为消息文本输入框, //此语句提取要送的消息内容。 Secret=Trim(Request.Form("secret")//secre为静静话接收者文本输入框 //此语句提取静静话接收者。 If Secret=""then If Talk< >""then //发送公共信息到Application("show") Application.lock Application("show")=Session("name")&":"&Talk&"<br>"&Application("show") Application.unlock End if Else If Talk< >""then //送出静静话信息。 Application.lock Application(Secret")=Session("name")&"给你的静静话:"& Talk // 此处 Secret为静静话接收者的代号,对照Application.unlock //words.asp中静静话显示语句,你会发现只有接收者才会显示这条静静话的,很巧妙吧。 End if End if ... 这样,聊天室的基本框架建好了,你可以找几个朋友进去欲言了。但是还十分简陋,接下来将给聊天室增添一些重要功能如,在线人数统计、聊天代号列表、聊天动作设计、刷新时间控制等。 三、聊天室功能扩允 1、在线人数统计 我们设置一个全局的Application("peopenumw")变量存放在线人数,并用一个Session("access")变量表示客户状态即是否已进入聊天室。每次登录进入聊天室时,根据ac-cess的状态对peoplenum进行增一或减一的操作,这样一来可以避免客户重复登录以及重复增减计数(比如客户多次点击BACK按钮或FORWARD按钮)。详细实现为: 进入聊天室时判定access=0时(未进入聊天室),则在 login.asp页面提交后可以进入主聊天室,并将peoplenum加一,access标志置一;当access=1时(已经进入聊天室未准确退出),在进入login..asp页面时将弹出警示框“你未退出聊天室,请勿重复登录。”并重导航至聊天室内,以让客户退出。此时peoplenum不增加。 退出聊卫室时的情况相似,当access=1时,peoplenum减一;当access=0时,peoplenum不变。 可能朋友会提出一个问题,假如用户非正常退出,比如直接切换地址栏或关闭浏览器,能否准确统计出这种人数减员呢?可以的,每个Session都有一个On-SessionEnd事件,当Session结束时触发运行。因此可以在此事件处理程序中加入: If Session("access")=1 then Application.lock Application("peoplenum")=Application("peoplenum")-1 Application.unlock End if 这样,当一个客户非正常退出一段时间(Session之Timeout属性决定)以后,会自动减去这个人数的。 2、聊天室代号控制 聊天室代号作为聊天成员的标志,要求能列出线代号表,且不答应同名。我解决这个问题的办法是用了VBSCRIPT的一个内置对象Dictionary,它就是一个带键值的数组,可以通过方式add、remove进行成员增减,还可以用函数EXISTS判定某个键值是否存在,这正好用于防止代号同名。 首先我们要创建一个Dictionary对象,可以在脚本中用Set Nickname=CreateObject("Scripting.Dictionary")创建,这里我们也可以在Global.asp中通过(object)标记创建,就可以在任何地方引用它了。 (OBJECT RUNAT="SERVER"SCOPE=APPLICATION ID=ohatname PROID="Scripting.Dictionary")(/OBJECT) 注:Global.asp是放置在网站根目寻下的一个ASP专用文件,每当web服务器启动或关闭时,都会执行Global.asp文件,故常用作初始化或清理工作。 每次登录时,首先把代号传给Session("name"),然后 Nickname=Trim(Requeat.form("txtbox")) ... chatname.add Nickname,Nickname 这样,在chatname中就保存了所有在线客户的代号。 而在每次退出时,要删除聊天代号:chat-name.remove Session("name") 如何在聊天室中列出在线客户代号呢?可以把静静话文本输入框改为一个可下拉的列表框,点击它时下拉显示所有代号列表,很简洁方便。 (select name="secrt\\\') (option Selected)//缺省选择为空,即不送静静话。 (% For=1 to chatname.count-1 %) (option) (%=chatname.Session("name")%)// 列出所有代号名。 (%Next%) (/select) 3、聊天室动作设计 假如你常去BBS聊天室的话,一定觉得那些动作很有趣。想在主页聊天室中加入动作吗?太轻易了,只要你想要。在笔者的聊天室中采用了类BBS的动作模式,(其实模式可以任意,由自己决定了。)比如我输入“//kick menu“就会显示“XXX把menu踢得鼻青眼肿”,有趣吗。实是很简朴的,判定输入字符首两个字符是否为“//”,然后根据后面的单词选择显示的内容。 If Instr(TALK,"//")=1 then Select case Rtrim(Mid(Talk,3,5))//取“//”后的5个字符 Case "kik" Application.lock Application("show")=Session("name")&“把Right(Talk,len (Talk)-7) &“踢得鼻青眼肿。”& Application("show") Application.unlock Case... End Select End if 这里使用了VBSCRIPT的几个字符串函数,以提取了Talk中的动作信息。聊天室的动作可以任意扩充,在笔者的聊天室中就有许多《大话西游》的台词呢。 4、其他功能扩充 *设置刷新时间 在words.asp中用(META http-equiv=“refresh” content=“10”)设置了固定的刷新时间10秒,但在实际中需要用户根据情况自己设定刷新时间,比如在速度较快时希望刷新时间短,而在速度慢时或想查看过去信息时希望刷新时间长些。我们可以在chat.asp加入一个文本输入框以输入客户想要在刷新时间,将此时间传给Session(“freshtime”),并把word.asp的那条语句改为:(% Response. Write “(META http-equiv=““refresh””content=“““&Session(“freshtime”)&”””)”%)即可。 *客户各自独立地显示帮助列表和控制命令 大家可能注重到了,上面所述的动作要为网友所知,必须要有一个帮助列表,而客户可以随时显示在自己的浏览器上而不会影响别人的版面。我家定义一个Session("show")变量存放各浏览器独立的信息(包括帮助信息和一些控制命令信息)。 在发送帮助列表和控制命令(如清屏、改名等)时,仍采用类BBS的方法,输入h显示帮助,输入n newname则改名。跟聊天室动作处理类似,我们首先判定首字符是否为“”,然后用一系列Select Casa语句列出各类信息或作出种控制操作。 好了,一个功能较为强盛的聊天室就构筑好了,在实际中还有许多自主性和可扩充的空间,各位朋友可以根据自己的喜好自由发挥。 返回类别: 教程 上一教程: SQL语言迅速入门之二 下一教程: ASP网站远程客户实现EXCEL打印功能 您可以阅读与"用ASP构筑主页聊天室"相关的教程: · XMLHTTP+Javascript+Asp写得聊天室,无刷新实现(三) · XMLHTTP+JAVASCRIPT+ASP写得聊天室,无刷新实现(六) · 用ASP建立一个简朴的聊天室 · XMLHTTP+JAVASCRIPT+ASP写得聊天室,无刷新实现(三) · XMLHTTP+JAVASCRIPT+ASP写得聊天室,无刷新实现(五) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |