asp怎样实现前台实时监控用户操作.流式日志?
起因是这样的..某一个站点.有多个用户模块例如(相册,问答,交友,博客,等等)
怎样在首页显得动感而富有生气呢?
如果用户在首页或重要页面上能及时查看到其他用户的公开操作信息.就会显得该站点活跃用户比较多…
恩.思路就到这里了…
下面是实现..
首先是无刷新输出一个简单的列表..

show.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META HTTP-EQUIV="pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate" />
<title>无刷新测试</title>
<script language="JavaScript">
function GetResult() //利用XMLHTTP读取服务器端内容
{
var list = new ActiveXObject("Microsoft.XMLHTTP");
list.open("POST","getact.asp",false);
list.send();
var strResult = unescape(list.responseText);
td.innerHTML= strResult;  //这里感谢boin同学的提醒
}
function MyShow() //每五秒从服务器读取一次数据
{
timer = window.setInterval("GetResult()",5000);
}
</script></head>
<body onLoad="MyShow()">

<p id=td>读取中请稍后….</p>
</body>
</html>

配合上

getact.asp

weseasd1111测试文字:sss
获取服务器时间,以验证无刷新读取是否成功<%=now%>
这里只是简单读取服务器时间,<br>
<a href=/user/?user=ts>ts</a>在<a href=/home>家园</a>购买了一套<a href=/home/?user=ts>新房子</a>
第n行信息

至此.无刷新结束….

接下来考虑怎样效率问题了…
方案一
如果getact.asp是从数据库读取相关信息…然后首页访问里一大就相当于无数人在无意识的ddos俺们的数据库服务器..绝对不行..
方案二
如果getact.asp是静态文本.其他文件用fso来写这个文件….会有弹出的可能(文件锁死)..并且操作复杂.对服务器压力比较大…
方案三[感谢boin同学的提醒]
如果getact.asp是从Application中读取(内存读取).则会比较好.文件锁死的情况也得到改善.Application有专门的lock参数

于是getact.asp就变成这样了

<%
LocalArray=Application("StoredArray")
Response.Write"<li>"
Response.Write LocalArray(0)
Response.Write"</li><li>"
Response.Write LocalArray(1)
Response.Write"</li><li>"
Response.Write LocalArray(2)
Response.Write"</li><li>"
Response.Write LocalArray(3)
Response.Write"</li><li>"
Response.Write LocalArray(4)
Response.Write"</li><li>"
Response.Write LocalArray(5)
Response.Write"</li><li>"
Response.Write LocalArray(6)
Response.Write"</li><li>"
Response.Write LocalArray(7)
Response.Write"</li><li>"
Response.Write LocalArray(8)
Response.Write"</li><li>"
Response.Write LocalArray(9)
Response.Write"</li>"
Application.Lock
Application("StoredArray")=LocalArray
Application.Unlock
%>

思路进一步向下走….
用户查看到的页面应该像聊天室一样,向上或者向下滚动,[自我觉得向下滚动比较好(新动作出现在第一个.自动删除最后一个)]

在每一个向数据库提交数据的post.asp中必须插入 操作application的动作.一旦post成功.则将操作动作.将操作人和操作对象.写入Application的第一个数据元.并将所有原数据元向后推移一位,再将最后一个数据元丢掉.
则相关application动作的调用写法是…

post.asp

<%

username="ts"
systemname="博客系统"
actname="写了一篇新博客"
url="blog.asp?username=ts&id=172"
%>……

<%if post=ok then
%>
<%
dim x()
 Redim x(10)
LocalArray=Application("StoredArray")
for i=0 to 9
    x(i)=LocalArray(i) 
  next
Application.Lock
Application("StoredArray")=LocalArray
Application.Unlock
%>
<%dim y
y=username&"在"&systemname&"<a href="&url&">"&&actname"</a>"
 dim MyArray()
 Redim MyArray(10)
 MyArray(0)=y
  for i=0 to 8
    MyArray(i+1)=x(i)
 next
Application.Lock
Application("StoredArray")=MyArray
Application.Unlock
%>
<end if>
………….


评论

该日志第一篇评论

发表评论

评论也有版权!