当IE iframe正接收a.asp(非.NET)大量数据并阻塞这条线程期间,xmlhttp异步或其它如何调用b.asp对Session写标志通知a.asp结束?

freeit100 2008-03-26 04:36:37
(1)
iframe正接收a.asp(非.NET)大量数据并阻塞了这条线程(a.asp调用了VB COM组件返回数据);
a.asp每返回一段数据就判断Session中某标志,若标志等于“stop”就中止返回数据;

(2)
IE6/7浏览器希望通知服务器中止数据发送,希望用xmlhttp异步或其它任何方式调用b.asp对Session写标志“stop”,以便a.asp“安全、正确地”中止;
前提是一定要让服务器a.asp可以读到中止标志。

问题:
我用xmlhttp异步post或get调用b.asp,总是readyState==1,在期间我试验就是写不进Session(该线程被阻塞,不是说IE有两个线程可用吗,怎么第二个就阻塞了~),直到a.asp全部数据返回结束b.asp才继续工作。我怎么办?
注:不要用浏览器端iframe的src="about:blank"的方法。
谢谢!
...全文
212 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeit100 2008-04-02
  • 打赏
  • 举报
回复
???
freeit100 2008-03-27
  • 打赏
  • 举报
回复
没有绝对的长连接,相对而以,指30秒、60秒等。

就是想让长连接该中止时就中止。当ASP看到某stop标志时,可以不再读取数据,可以不再继续返回数据,Response.End就结束了。

当然,是指HTTP/1.0或1.1正常连接时返回正确数据。

继续最初的问题:有什么简单办法上传一个“中止”信号给服务器?
freeit100 2008-03-27
  • 打赏
  • 举报
回复
没有绝对的长连接,相对而以,指30秒、60秒等。

就是想让长连接该中止时就中止。当ASP看到某stop标志时,可以不再读取数据,可以不再继续返回数据,Response.End就结束了。

当然,是指HTTP/1.0或1.1正常连接时返回正确数据。

继续最初的问题:有什么简单办法上传一个“中止”信号给服务器?
milizi820 2008-03-27
  • 打赏
  • 举报
回复
如果楼主说的长连接一直存并下载数据,
但多线程并不是绝对的同步,就算你改变了session的值,a.asp也不能做到即时的停止吧。

那么a返回的数据也不会是一个字节不差吧
freeit100 2008-03-27
  • 打赏
  • 举报
回复
to milizi820:

用纯浏览器(无插件)借助一个HTTP长连接(http long-lived connection)接收Server Push过来的分块数据(例如html、xml等),在今天变得十分有意义,我很希望和大家能找到一种简单的控制方法,最好简单到ASP + iframe + Ajax。

IE6/7在Ajax xhr.readyState==3时是无法读取数据的(必须==4),这就逼迫采用iframe。无论直接了当的iframe,还是嵌入htmlfile内的iframe,这个世界已经给我们能力“变相”让IE6/7 iframe处理ASP Push过来的分块数据(每组“报文”),具体请查询Comet htmlfile。

麻烦在于如何简单控制ASP推过来的数据流,如何“不丢失信息地中止”,这就需要服务器端能获得“中止”请求,而不能浏览器端单方改变iframe的src。在IE6/7一个进程内,一旦iframe阻塞了线程,就出现我最开始提出的问题了。

还是基于简单的ASP(非.NET),如何在iframe接收推送来的数据期间(通俗举例,如正接收聊天消息),能够较简单地告知服务器不要推送后续数据,一个字节都不丢失?

明摆着线程受到阻塞,但还是想和大家“变相”找到可行思路。
milizi820 2008-03-27
  • 打赏
  • 举报
回复
asp好像是不支持多线程
不过楼主是要手动修改session还是程序判断去修改呢。
如果程序判断那就有两个表单在同时进行。这应该是不可以的。
那如果是手动的去停止,能不能调入ie的stop功能呢。如果数据下载的数据允许这样的话。
freeit100 2008-03-27
  • 打赏
  • 举报
回复
to aCatInNight:

我的现象正是那样。除非下载数据、上传数据分别指向主域和子域(不同domain),例如用两个iFrame试验就可看到。

我希望的是:在相同domain下,一个iFrame正接收a.asp数据期间,怎样能够即刻向b.asp POST数据写进Session(写进Session即可,不必一定等b.asp返回的数据)?
aCatInNight 2008-03-27
  • 打赏
  • 举报
回复
a.asp在处理时,整IE窗口不是在等待的吗?这时可以提交b.asp吗
freeit100 2008-03-27
  • 打赏
  • 举报
回复
???
freeit100 2008-03-26
  • 打赏
  • 举报
回复
关键是:在iframe正在接收服务器a.asp数据、这条线程被其阻塞期间,如何通过另一条线程向b.asp提交中止信息呢?

无论是Server Push分块数据,还是通常的分批发送,ifarme这条线程当前都会被阻塞。当a.asp线程阻塞时,处理b.asp疑似要排队候着。

另外的情况是,不要分块用异步/同步xmlhttp多次AJAX申请每块数据,每次建立连接、会话都会消耗握手时间,要用一次HTTP长连接来接收完全部数据(例如数据都是XML,10MB)。
myvicy 2008-03-26
  • 打赏
  • 举报
回复
我是将大量数据拆分分批发送处理,然后在每次发送前判断是否收到了停止的指令.因为dll里的循环似乎对外部的session反应不敏感.
freeit100 2008-03-26
  • 打赏
  • 举报
回复
能否赐教?谢谢
myvicy 2008-03-26
  • 打赏
  • 举报
回复
以前试过,效果不是很好.
后来换了个方法.

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧