日期:2013-07-24  浏览次数:20783 次

各位喜欢上网冲浪的朋友一定都去过网易的虚拟社区吧,里面的传呼台功能想必是很得大家的喜爱。通过传呼台,我们可以呼叫任何一个目前在虚拟社区里面冲浪的网友,可以实现在线交谈哦。
其实,我们使用ASP完全可以实现同网易虚拟社区里面传呼台同样的功能,怎么?不相信?那就跟随我一步一步用ASP来实现网络传呼机吧。
Active Server Pages(ASP)是服务器端脚本编写 环境,使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序。ASP 应用程序很容易开发和修改。
接下来,我们就开始编写我们的网络传呼机了。
首先,实现网络传呼的功能有两种方法:
一. 利用数据库实现传呼信息的保存和处理
这种方法的优点是,存储信息处理非常方便,但是它的缺点也是显而易见的,就是增加了服务器端的负担,因为频繁的存储数据库将会大大增加I/O存取次数,导致网站的连接速度变得缓慢。
二. 直接使用Application来保存传呼信息
这种方法的优点是,速度明显快于使用数据库来保存传呼信息的方法;缺点是处理信息比较繁琐,但是很值得的哦,我们首先要保证的是整个网站的性能。

综合上面的因素,我们将采用第二种方法来编写网络传呼机,对于第一种方法,我会在最后简单介绍一下。
我们的网络传呼机需要三个页面,也就是“传呼台”页面,“显示传呼信息”页面,“监视传呼机”页面。
“传呼台”页面(bbsSendBegic.asp)是用来向其他在线用户发送信息的页面,自然就好像是我们生活中的传呼台喽。
“显示传呼信息”页面(bbsSendInfo.asp)是在有人呼叫你的时候,弹出来的显示呼叫内容的页面,就像你自己的BP一样,但我们的网络BP机功能更加强劲哦,他可以即时回复别人给你的信息,也可以稍候再回复,或者干脆清除掉这条信息。
“监视传呼机”页面(bbsAutoSearch.asp)是随时监视是否有人呼叫你的页面,就像一个不知疲倦的自动机器人一样一直在监视所有的传呼信息,并且会过滤出来只属于你的传呼信息。
三个页面之间只有“显示传呼信息”页面和“监视传呼机”页面关系密切, “传呼台”页面是一个相对独立的页面,三者关系如下图:

没有直接关系 显示到”BP机”





接下来,我们开始编写第一个页面,就是“传呼台”页面。在这个页面里面,我们要实现如下功能:
1. 取得当前在线的用户列表
2. 发送信息到传呼信息队列当中进行排队,为以后取出信息做准备

页面的具体代码如下(bbsSendBegin.asp):
代码中有详细的注释信息,可以仔细阅读

<%@ Language=VBScript %>
<%
users=split(application("OnlineUser"),",") ‘分割得到当前在线用户的列表,保存到一个数组中
If trim(request("act"))="wantsend" then ‘判断目前的操作状态
who=trim(Request.Form("who")) ‘得到被呼叫用户名称
content=trim(Request.Form("content")) ‘得到呼叫内容
meme=trim(request("userid")) ‘得到发送传呼的用户名称
If who="" or content="" then
Response.Redirect "error.asp?msg=姓名或者讯息内容为空,无法传送!"
end if
‘下面将发送的信息送至传呼信息队列当中.
If trim(application("Message"))="" then
Application.Lock
application("Message")=who & "$" & content & "$" & meme ‘放置到传呼信息队列当中
Application.UnLock
else
Application.Lock ‘‘放置到传呼信息队列当中
application("Message")=application("message") & "&" & who & "$" & content & "$" & meme
Application.UnLock
end if
‘发送完毕,关闭页面
Response.Write "<script language=javascript>self.close();</script>"
end if
%>
<html>
<title>网络传呼机</title>
<head>
<script language="javascript">
function check()
{
if(document.send.content.value.length<1)
{
alert("您必须要说两句喔!");
return;
}
document.send.action="bbsSendBegin.asp?act=wantsend&userid=<%=trim(request("userid"))%>";
document.send.submit();
}
</script>
</head>
<body bgcolor=GhostWhite >
<br>
<center>
网  络  传  呼  机
</center>
<br>
<%If Ubound(users)>=2 then%>
<center>
<form name="send" method="post">
<table>
<tr>
<td>送讯息给:</td>
<!-- 得到当前在线用户的列表,并放到下拉列表框中 -->
<td>
<select name="who">
<%For i=0 to ubound(users)%>
<%If trim(users(i))<>trim(meme) then%>
<%if i>1 then%>
<%if users(i)<>users(i-1) then%>
<option><%=users(i)%>
<%end if%>
<%else%>
<%if users(i)<>meme then%>
<option>