ajax+asp的落伍者

asp版火种--雏形版(二)

 

这是写的第二遍显然不如第一遍好,没想到在博客园写帖子居然会页面出错!害我几乎要完成的文章毁于未复制!这点是我对博客园不满意的地方!

闲话少叙没心情将原理了,在寻遍资料后找到了网上这段资料作者是后面拼音:


BeginTimer = Timer()
  BeiginTime = Now()
  On error resume next
  dim objXmlHttp
   Set objXmlHttp = CreateObject("Msxml2.ServerXMLHTTP")
  
   ' ------------------------------------------------------------
   lresolveTimeout = 10000 ' 解析DNS名字的超时时间,10秒
   lconnectTimeout = 10000 ' 建立Winsock连接的超时时间,10秒
   lsendTimeout = 120000 ' 发送数据的超时时间,120秒
   lreceiveTimeout = 60000 ' 接收response的超时时间,60秒
   'objXmlHttp.setTimeouts lresolveTimeout, _
   ' lconnectTimeout, _
   ' lsendTimeout, _
   ' lreceiveTimeout
   ' ------------------------------------------------------------
   sURL ="http://210.82.95.171:9090/xxx.asp"
   objXmlHttp.Open "POST", sURL, False
   objXmlHttp.send "1212312"
  EndTimer = Timer()
  TimeSpan_Send = EndTimer - BeginTimer
  EndTime = Now()
  msgbox sURL & " okay!TimeSpan=" & CStr(TimeSpan_Send) & ";start:" & BeiginTime & ";EndTime:" & EndTime
  Writen by zhengyun.NoJunk(at)tomosoft.dot.com

既然xmlhttp有一个settimeout 何不拿来用之?我将上面的代码修改了一下如下:

function xt(){
var xmlServerHttp = new ActiveXObject("Msxml2.ServerXMLHTTP");
var lResolve = 2 * 1000;
var lConnect = 2 * 1000;
var lSend = 2 * 1000;
var lReceive = 2 * 1000;
xmlServerHttp.setTimeouts(lResolve, lConnect, lSend, lReceive);
xmlServerHttp.open("GET", "http://212.97.224.68/quickstart/aspplus/doc/businessobjs.aspx", false);
xmlServerHttp.send();
}

读者注意这个url很关键,如果url过短可能不会成功,原因是他不会到2秒的时候就会返回bad的url请求,这点我用笔记本在不上网的情况下请求虽然代码一样,但执行周期就不是2秒了,因为server很快就发现请求失败,这样循环周期就不是两秒了,我们的设置就失去了意义!所以这个url尽量要让server去分析浪废一下server的时间,既然要做SL,死循环是固不可少了,要让SERVER运行而不会在页面关闭而停止,代码一定要放在global.asa里面。下面的代码是雏形代码:

global.asa页面代码:

<SCRIPT RUNAT="Server" LANGUAGE="Javascript">
Server.ScriptTimeOut=99999999;//设置SL的生命周期
function Application_OnStart(){//将代码放在application_onstart事件中
var l=1;
while(l=1){//死循环
try{
xt();//执行错误url连接2秒为心跳周期
}catch(e){//缓存错误
Server.Execute("1.asp");//执行真正的目的代码
}
}
}
function Application_OnEnd(){
}
function xt(){
var xmlServerHttp = new ActiveXObject("Msxml2.ServerXMLHTTP");
var lResolve = 2 * 1000;//设置心跳周期
var lConnect = 2 * 1000;
var lSend = 2 * 1000;
var lReceive = 2 * 1000;
xmlServerHttp.setTimeouts(lResolve, lConnect, lSend, lReceive);
xmlServerHttp.open("GET", "http://212.97.224.68/quickstart/aspplus/doc/businessobjs.aspx", false);
xmlServerHttp.send();
}
</SCRIPT>

1.asp页面代码:

<script language="javascript" runat=server>//读者自己改成<%吧,编辑器不让直接弄呵呵
var conn=Server.CreateObject("ADODB.Connection");
var conntext="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
conntext +=Server.MapPath("db.mdb");
//conntext +="E:\\1\\jsser";也可以用这种方法使用绝对地址
//conntext +="**.mdb";
conn.open(conntext);
var sql="insert into [db1] ([tt],[cc],[aa])values('1','2','3')";
conn.Execute(sql);
conn.Close();
conn=null;
%   >

================================================

以上的意思很简单就是要每隔两秒做一件事,而这件事在1.asp里面往指定的数据库写一些内容,测试环境需要你自己搭建,我的环境是iis6,将应用程序回收的默认都去掉否则你设置的生命周期将被应用程序池的回收而失效(也许用虚拟空间的读者会很生气,但世事不能全尽如人意)。配置完成后,浏览一下1.asp,页面会打不开,不用管它,将它关闭。这时候你观察自己的数据库,虽然网页关掉了,但程序还在执行着,数据库的记录在不断增加,每2秒增加一条。再打开任务管理器每两秒cpu使用率有一个波动,和心电图很像,这样一个粗糙的SL就这样诞生了,当然1.asp的内容需要读者自己去想象,我的任务管理器:很有规律的波动。感兴趣的读者可以下载我的压缩包自己配置测试环境,下一篇文章我们一起解决asp单线程的问题,因为这个程序执行后,别的页面将无法打开,我们将从下面文章开始用asp模拟多线程之旅。

 

posted on 2010-01-25 16:17  钢子  阅读(1465)  评论(19编辑  收藏  举报

导航