互联网连接检查超时

时间:2019-10-01 16:15:06

标签: asp-classic timeout hang connectivity internet-connection

我有一个Classic ASP Web应用程序,该应用程序可以在99%的时间离线运行(在没有互联网服务的农村地区)。

该应用确实与互联网建立连接时,会提醒用户,以便他/她/他们可以将数据与该网络应用的在线版本进行同步。

我有一个检测功能,当有互联网服务时,该功能很好用,可以立即检测到互联网。

'CHECK FOR AN INTERNET CONNECTION
    WITH CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "http://xxx.xxxx-xxxxx.org", FALSE
        .SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"
        ON Error RESUME NEXT
        .Send
        IF .waitForReponse(2) THEN
            IF .Status = 200 THEN 
                strOnline = "Y"
            ELSE
                strOnline = "N"
            END IF 
        ELSE
            strOnline = "N"
        END IF
    END WITH
END IF 

问题在于,当没有Internet服务时,脚本会使页面在加载之前挂起大约12秒钟。

正如您在上面看到的,我尝试将支票放在.WaitForResponse()中,但似乎没有任何作用。

如果在开始的1或2秒钟内没有找到互联网,我该怎么做才能取消连接检查?

2 个答案:

答案 0 :(得分:1)

这不是使代码运行更快的完美答案。相反,它是更好的长期解决方案的替代方法。

TLDR:使此检查进入普通的浏览器端异步JS函数,或使用无会话的ASP'页面',并通过相同的异步JS方法调用它。

更长的解释:我认为这段代码正在本地服务器上运行,由用户浏览器启动,可能是每个ASP页文件的“顶部”中的包含内容。您希望尝试从页面构建中删除所有长时间运行的ASP代码,因为每个小的处理延迟都会损害感知的性能。

在这种情况下,您只是在检查互联网连接是否可用并通知用户。您可以通过将普通的JS函数嵌入到发送给浏览器的每个页面的开头来实现此目的,而无需完全使用ASP来实现此功能。只需让JS异步尝试访问基于Internet的服务器即可。如果您获得200,则表示互联网正常运行;如果网络为400或类似水平,则表示互联网正常运行。

如果您绝对“必须”坚持使用ASP,则可以将该功能提升到单独的ASP文件中,并使用相同的JS异步技术对其进行调用,从而使ASP成为无会话会话,并且包含

<%@ ENABLESESSIONSTATE=False %>

位于文件顶部。对基于会话的ASP页面的请求在顺序队列中运行,因此,进行无会话将阻止该请求阻塞队列。

摘要-使服务器从ASP的“ every = page”流中检出,理想情况下,将其从ASP中全部取出并制成纯JS。

答案 1 :(得分:0)

经过大量的实验,我找到了自己喜欢的解决方案,并且经受了重大的压力测试:

strOnline = "N"
    Const WAIT_TIMEOUT = 2
    Dim http
    Set http = Server.CreateObject("MSXML2.ServerXMLHTTP")
        http.open "POST", "http://172.217.4.132", TRUE 'async request
        http.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"
        http.send 
        IF ERR.NUMBER <> 0 THEN
            strOnline = "N"
        ELSE
            IF http.waitForResponse(WAIT_TIMEOUT) THEN 'response ready
                strOnline = "Y"
            ELSE 'wait timeout exceeded
                strOnline = "N" 
            END IF
        END IF 
    SET http = NOTHING

我衷心希望能对别人有所帮助。干杯,N