欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【在asp聊天室里实现房间功能和用户显示】,下面是详细的分享!
在asp聊天室里实现房间功能和用户显示
在我写下了《在asp聊天室里实现悄悄话功能》一文后,很多的朋友来信问我关于其他高级功能实现的问题。确实,例如房间、用户管理等高级功能是一个完善的聊天室所必有的功能。在这里面又以房间功能是比较难于实现的。因此我想和大家谈谈 这个问题。
我依然倾向于用数组来解决这两个问题,这并不是说不能用数据库来解决,但我们要考虑性能的问题。而且用数组有几个好处,利于排序,利于控制总的长度。在服务器内存中长驻(有利于性能的提高)。我先讲一讲房间的问题,这里给出大家在两个系统 房间中切换的方法。至于自建房间的方法,希望大家能触类旁通。还有关于用户在线显示的问题,因为我们既要显示各个房间的用户和总的用户,所以会和房间产生一些互动,在讲的时候请大家注意。为了大家使用的方便,我尽量把这些功能写成子程序或子函数,大家可以直接的应用。
我们先看在gloable.asa中的定义,这很重要。
| 以下为引用的内容: <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> Sub Application_OnStart() dim pChat_Value(50) dim pChater_Value(150) dim pRoom_Value(50) End Sub Sub Session_OnStart() |
在gloable.asa中进行了如上的定义后,我们就可以在后面的页面中应用了。我们假设先有一个用户的登陆确认(从数据库中确认用户的信息)大致的代码如下:
| 以下为引用的内容: <!-- #include virtual="/chat/inc/Convert.inc" --> <%'将欢迎的内容记入application数组并调整顺序%> <!-- #include virtual="/chat/inc/RoomRefresh.inc" --> <!-- #include virtual="/chat/inc/Logname.inc" --> <%'将姓名记入application数组%> <% if request.servervariables("Request_Method")="POST" and session("sChater_Name")="" then name=request.form("txtName") pass=request.form("txtPass") set res=session("res") sql="Select * From Chater_Message Where Name='"&name&"' And Pass='"&pass&"';" res.open sql,,3,3 if res.BOF then response.write "Login Failed"&"<br>" response.write "<a href=http://www.chinaz.com/program/2007/0703/"&chr(34)&"LoginPage.htm"&chr(34)&">"&"请重新登陆"&"</a>" res.close else session("sChater_Name")=name Welcome_Message="common"&","&"系统"&","&"所有人"&","&"<font color="&chr(34)&"#ff98ff"&chr(34)&">"&"各位看官,"&session("sChater_Name")&"来也"&"</font>"&"<br>" '这句话请大家一定要注意,如果你读了我的上一篇文章你应该知道是什么意思。 application.lock call convert(Welcome_Message) call logname(session("sChater_Name"),session("sRoom_Name")) call roomrefresh() application.unlock res.close response.redirect "ChatPage.htm" end if end if %> |
下面是三个关键的子程序,在后面也有大量的应用。
| 以下为引用的内容: convert.inc <% sub convert(Message) dim tmpChat_Value() pChat_Value=application(session("sRoom_Name")&"_Value") pChat_Number=application(session("sRoom_Name")&"_Number") '由于使用了session("sRoom_Name")来保存当前的房间名,因此可以被每个房间的 提交子过程调用。 if pChat_Number>=50 then pChat_Number=0 end if redim tmpChat_Value(pChat_Number) for i=0 to pChat_Number tmpChat_Value(i)=pChat_Value(i) next pChat_Value(0)=Message for i=0 to pChat_Number pChat_Value(i+1)=tmpChat_Value(i) next pChat_Number=pChat_Number+1 application(session("sRoom_Name")&"_Value")=pChat_Value application(session("sRoom_Name")&"_Number")=pChat_Number end sub %> logname.inc |
以下为引用的内容:
showpage.asp
<!--
#include virtual="/chat/inc/Convert.inc"
--> <%'将内容记入application数组并调整顺序%>
<!--
#include virtual="/chat/inc/ChangeRoom.inc"
--> <%'处理换房的过程%>
<!--
#include virtual="/chat/inc/Logname.inc"
-->
<!--
#include virtual="/chat/inc/uLogname.inc"
-->
<%
if request.servervariables("Request_Method")="POST" then
if request.form("cmdChangeRoom")="换房" then
application.lock
call changeroom()
application.unlock
else
chat=request.form("txtChat")
who=session("sChater_Name")
towho=request.form("selShow")
common_or_private="common"
chat=who&towho&"说:"&chat
if request.form("chkPrivate")="private" then
common_or_private="private"
chat=chat&"[私聊]"
end if
application.lock
call convert(common_or_private&","&who&","&towho&","&chat&"<br>")
application.unlock
end if
end if
%>
<html>
<head>
<title> ShowPage </title>
</head>
<body>
<center>
<%
response.write session("sRoom_Name")
%>
</center>
<%
for i=0 to application(session("sRoom_Name")&"_Number")-1
position_one=instr(application(session("sRoom_Name")&"_Value")(i),",")
position_two=instr(position_one+1,application(session("sRoom_Name")&"_Value")(i),",")
position_three=instr(position_two+1,application(session("sRoom_Name")&"_Value")(i),",")
if mid(application(session("sRoom_Name")&"_Value")(i),1,position_one-1)="common" or session("sChater_Name")=mid(application(session("sRoom_Name")&"_Value")(i),position_one+1,position_two-position_one-1) or session("sChater_Name")=mid(application(session("sRoom_Name")&"_Value")(i),position_two+1,position_three-position_two-1) then
response.write mid(application(session("sRoom_Name")&"_Value")(i),position_three+1)
end if
next
'大家注意了,这里是关键的关键,房间的显示与悄悄话的处理都在这里了
代码是太长了,但若使用好的数据结构应该能大大简化代码,我会用sever端的
javascript来试一试,希望可以
%>
<%
end if
%>
</body>
</html>
以上所分享的是关于在asp聊天室里实现房间功能和用户显示,下面是编辑为你推荐的有价值的用户互动:
相关问题:我在用ASP制作聊天时候,需要在聊天室上实现用户列...
答:1、用户登陆 指定缓存为真 判断用户名是否为空,以判断用户是否在聊天界面 获得用户IP 用户登陆表单 请输入匿名: 密码: 性别: 先生 女士 返回的错误变量 用户确在聊天界面中 2、用户发言 用户开始真正发言 用户IP 用户发言表单 颜色: 黑色 颜色... >>详细
相关问题:如何用asp获取聊天室在线用户列表
答:一个application存放所有在线用户,再就是采用ajax方法不断刷新,当某人的session中断的时候在列表中清除该用户。 >>详细
相关问题:asp 实现一个简易的网上聊天室
答:用session实现,不过,你用户名不存数据库,你存哪时?TXT,这个速度太慢了.不建议 >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
