xmlhttp让asp实现“多线程”

原创 2004年10月26日 18:36:00

  看了大白菜芯写的php实现多线程,一时间觉得有用,就改了个asp版的。。呵呵,这里感谢他的思路!(http://blog.csdn.net/wapweb/archive/2004/08/16/76319.aspx

   1.原理实验

原理当然都一样,利用web服务器支持多线程,在同一页面里向服务器发多个http请求来完成我们的工作。更详细的分析,看大白菜芯写的吧。php里用Socket,asp当然用封装好了的xmlhttp了。

  还是先实验一下,在一个页面里同时写2txt文件,比较写入时间的差异。代码如下:

<%

startime=timer()

''----------asp实现多线程----------''

 function runThread()

        dim Http

        set Http=Server.createobject("Msxml2.XMLHTTP")

        Http.open "GET","http://127.0.0.1/thread.asp?action=b",false

        Http.send()

 end function

 

 function a()

         dim Content,FilePath,MyFile

        Content=now()&chr(30)&timer()

              FilePath=server.MapPath("a.txt")

              Set fso = CreateObject("Scripting.FileSystemObject")

              Set MyFile = fso.CreateTextFile(FilePath, True)

              MyFile.Write(Content)

              MyFile.Close

 end function

 function b()

           dim Content,FilePath,MyFile

        Content=now()&chr(30)&timer()

              FilePath=server.MapPath("b.txt")

              Set fso = CreateObject("Scripting.FileSystemObject")

              Set MyFile = fso.CreateTextFile(FilePath, True)

              MyFile.Write(Content)

              MyFile.Close

 end function

if(Request.QueryString("action")="") then

        runThread()

        a()

else

           b()

end if

%>

Script Execution Time:<%=fix((timer()-startime)*1000)%>ms

 

 

运行后的结果显示:

a文件和b文件中的时间是基本相同的。

  2.实际应用比较

   比如我同时抓取2个页面的html代码,一个sohu首页,一个是sina首页,用2种方式:一个是常规的顺序的代码执行,单线程执行,一个是这里的多线程执行,比较页面完成时间,代码如下:

testspeed1.asp:

<%

startime=timer()

function getHTTPPage(url)

 on error resume next

 dim http

 set http=Server.createobject("Msxml2.XMLHTTP")

 Http.open "POST",url,false

 Http.send()

 if Http.readystate<>4 then exit function

 getHTTPPage=bytes2BSTR(Http.responseBody)

 contents = getHTTPPage

 Response.Write "<xmp>"

 Response.Write(contents)

 Response.Write "</xmp>"

 set http=nothing

 if err.number<>0 then err.Clear 

end function

 

Function bytes2BSTR(vIn)

 dim strReturn

 dim i,ThisCharCode,NextCharCode

 strReturn = ""

 For i = 1 To LenB(vIn)

  ThisCharCode = AscB(MidB(vIn,i,1))

  If ThisCharCode < &H80 Then

   strReturn = strReturn & Chr(ThisCharCode)

  Else

   NextCharCode = AscB(MidB(vIn,i+1,1))

   strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))

   i = i + 1

  End If

 Next

 bytes2BSTR = strReturn

End Function

 

getHTTPPage("http://www.sohu.com/")

getHTTPPage("http://www.sina.com.cn/")

%>

Script Execution Time:<%=fix((timer()-startime)*1000)%>ms

  Testspeed2.asp:

<%

startime=timer()

function getHTTPPage(url)

 on error resume next

 dim http

 set http=Server.createobject("Msxml2.XMLHTTP")

 Http.open "POST",url,false

 Http.send()

 if Http.readystate<>4 then exit function

 getHTTPPage=bytes2BSTR(Http.responseBody)

 contents = getHTTPPage

 Response.Write "<xmp>"

 Response.Write(contents)

 Response.Write "</xmp>"

 set http=nothing

 if err.number<>0 then err.Clear 

end function

 

Function bytes2BSTR(vIn)

 dim strReturn

 dim i,ThisCharCode,NextCharCode

 strReturn = ""

 For i = 1 To LenB(vIn)

  ThisCharCode = AscB(MidB(vIn,i,1))

  If ThisCharCode < &H80 Then

   strReturn = strReturn & Chr(ThisCharCode)

  Else

   NextCharCode = AscB(MidB(vIn,i+1,1))

   strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))

   i = i + 1

  End If

 Next

 bytes2BSTR = strReturn

End Function

 

 function runThread()

        dim Http

        set Http=Server.createobject("Msxml2.XMLHTTP")

        Http.open "GET","http://127.0.0.1/thread.asp?action=b",false

        Http.send()

 end function

 

 function a()

         getHTTPPage("http://www.sohu.com/")

 end function

 function b()

           getHTTPPage("http://www.sina.com.cn/")

 end function

if(Request.QueryString("action")="") then

        runThread()

        a()

else

           b()

end if

%>

Script Execution Time:<%=fix((timer()-startime)*1000)%>ms

运行的时间结果:

 

次数

Testspeed1运行时间ms

Testspeed2.asp运行时间ms

1

15593

13078

2

13343

14375

3

12828

12515

4

12437

12125

5

12109

11734

6

12281

12140

7

12703

12062

8

13468

12656

9

12328

12187

10

12343

12156

以上10次是一个页面完后另一个页面再执行的。谁先谁后也是任意的。有一条记录异常。

为了避免网络的原因,以下5次将测试地址改成本机http://127.0.0.1

11

109

46

12

62

46

13

62

48

14

78

64

15

62

46

以上5次是一个页面完后另一个页面再执行的。谁先谁后也是任意的。

 结果:好象是要快一点哦。。。。。。。。。。。

 

 

附录:阿泰兄发布了一个《XMLHTTP批量抓取远程资料》,打算和他说说,修改成这个思路的,发布出来,估计要等一下了。

asp.net中使用线程

 在asp.net中执行一个长时间的操作,有的时候需要在在客户端有一个反馈能了解到任务的执行进度,大致看了一下有这么几种做法: (1)按下按钮的时候给出一个提示正在执行任务,执行完毕让这个隐藏 (2)...
  • chenyuling
  • chenyuling
  • 2007年05月19日 16:25
  • 5153

ASP.NET多线程编程(一)

 Thread的使用using System;using System.Threading;public class ThreadExample { public static void Thread...
  • gloomyboyo
  • gloomyboyo
  • 2006年08月30日 16:08
  • 10912

ASP多线程下载

  • 2012年02月09日 09:21
  • 39KB
  • 下载

ASP.NET多线程范例1

 线程池的使用using System;using System.Threading;using System.Collections;namespace ASPNETThread{ //定义了一个结...
  • gloomyboyo
  • gloomyboyo
  • 2006年08月09日 15:23
  • 15451

XmlHttp让Asp实现“多线程”

  转自: http://blog.csdn.net/wzgme/archive/2004/10/26/153165.aspx    看了大白菜芯写的php实现多线程,一时间觉得有用,就改了个asp版...
  • AppleBBS
  • AppleBBS
  • 2005年01月06日 13:32
  • 2050

asp xmlHttp用法举例

一般来说,我们做网站,数据都是在我们自己的数据库中的,但有些数据,我们不想也不能自己去收集数据,比如新闻\天气预报,(我们无法天天更新),所以我们就需要借助别人的网站来显示这些内容 。但如果直接链接到...
  • chinaPhoneLab
  • chinaPhoneLab
  • 2007年03月15日 17:28
  • 5556

ASP.NET中的多线程整理

线程,是操作系统中的术语,是操作系统进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以有很多线程,每条线程并行执行不同的任务。同一进程中的多条线程将共享该进程中的全部系统...
  • taoerchun
  • taoerchun
  • 2016年03月24日 18:27
  • 2191

c#(asp.net) 多线程示例,用于同时处理多个任务

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We...
  • smartsmile2012
  • smartsmile2012
  • 2015年03月10日 17:04
  • 3775

ASP模拟POST提交,然后XMLHTTP获取数据总是乱码,请大家帮忙,感谢!

目前在建的一个项目要求使用外部的一个网站达到切词的目的,由于外部网站的API接口要求必须是POST提交数据,因此只能模拟POST提交,然后再去读取提交后的数据,我用以下的代码,获取回来的中文总是乱码,...
  • lishimin1012
  • lishimin1012
  • 2017年03月06日 22:18
  • 599

使用xmlhttp 实现多文件上传

如今xml技术渐渐成熟,成为了一种网站传播数据的又一种方式,下面是我用xmlhttp写的一个多文件上传程序.包括客户端和服务端两部分..本程序的实现是利用xml可以在其结点存放经base64编码的二进...
  • xkou
  • xkou
  • 2004年07月17日 15:03
  • 1449
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xmlhttp让asp实现“多线程”
举报原因:
原因补充:

(最多只允许输入30个字)