A. 如何为Microsoft.XMLHTTP添加超时设置
onreadystatechange:在异步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
responseBody: 结果返回为无符号整数数组。
responseStream: 结果返回为IStream流。
responseText : 结果返回为字符串。
responseXML: 结果返回为XML格式数据。
具体的使用方法
创建XMLHTTP对象的语句如下:
Set objXML = CreateObject(Msxml2.XMLHTTP) 或Set objXML = CreateObject(Microsoft.XMLHTTP)'Or for version 3.0 of XMLHTTP, use:'Set objXML = Server.CreateObject(MSXML2.ServerXMLHTTP)
对象创建后调用Open方法对Request对象进行初始化,语法格式为:
objXML.Open(http-method,url,async,userID,password)
Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示:
http-method:HTTP的通信方式,比如GET或是POST
url:接收XML数据的服务器的URL地址。通常在URL中要指明ASP或CGI程序
async:一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
userID:用户ID,用于服务器身份验证
password:用户密码,用于服务器身份验证
XMLHTTP对象的Send方法
用Open方法对Request对象进行初始化后,调用Send方法发送XML数据:
objXML.send()
Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。
发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。
XMLHTTP对象中的readyState属性其能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。
B. python中requests请求超时 异常怎么书写
超时
你可以告诉requests在经过以timeout参数设定的秒数时间之后停止等待响应:
>>>requests.get('http://github.com',timeout=0.001)
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<mole>
requests.exceptions.Timeout:HTTPConnectionPool(host='github.com',port=80):Requesttimedout.(timeout=0.001)
用异常处理获取超时异常就可以了,给你个例子,自己修改既可以
try:
requests.get('https://www.taobao.com/',timeout=0.1)
exceptrequests.exceptions.ConnectTimeout:
NETWORK_STATUS=False
exceptrequests.exceptions.Timeout:
REQUEST_TIMEOUT=TRUE
C. 水能详细讲解一下java 中的异常处理 try catch throw
没怎么用过throw。用过try和catch。
1.throw,等你程序比如检测到一个非法的值,则可以写代码,专门throw,抛出这个异常(后期会有人捕获并处理的)
2.
catch,我是和try一起用的。
即:
try{
做你要做的事情,
尤其是可能会出错的某些事情
比如通过网络访问某个地址
则可能出现超时等情况,此时最好就是把相关代码放到此try中
}
catch()
{
然后在catch中捕获,处理对应的异常
比如是超时的异常,就弹出个对话框,告诉用户超时了,之类的
}
3.总之,把可能,容易出错的代码,放到try中,
然后在catch中写相关的错误的处理的代码。即可。
感兴趣的话,用google搜:
crifanlib.cs
里面有我写的各种函数,其中有用到try和catch。
D. 前端会话超时,异常怎么处理
)普通http请求的session超时。
b)异步http请求的session超时,使用ext后大部分的界面刷新都是异步的ajax请求。
不管是那种类型的http请求总是可以由一个过滤器来捕捉。
分类:普通http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。
其实对于常见的ajax框架,header中还有标示自己身份的header信息。
对于普通的http请求,发现session超时后直接重定向到一个超时页面,显示访问超时。
对于异步http请求,其实有两种处理方式,第一种:发现session超时后则向请求的response中写入特定的超时头信息,客户端ajax对象检测
头信息,发现有超时状态标志后调用显示超时信息的javascript方法,提示用户访问超时。
第二种:发现session超时后,添加respone报错信息 ,在前端通过ext的requestexception事件来监听是否会话超时。
E. 如何给ExecutorService异步计算设置超时
ExecutorService接口使用submit方法会返回一个Future<V>对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用get方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消则由cancel方法来执行。还提供了其他方法,以确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用Future但又不提供可用的结果,则可以声明Future<?>形式类型、并返回null作为底层任务的结果。
写个简单例子:
import java.util.concurrent.*;
/**
* To change this template use File | Settings | File Templates.
*
* @author wangqing
* @since 1.0.0
*/
public class TestFuture {
public static void main(String[] args) {
ExecutorService poll = Executors.newFixedThreadPool(100);
Future<Boolean> future = poll.submit(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
Thread.sleep(1000*10);
System.out.println("任务执行完成");
return true;
}
});
try {
future.get(3,TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace(); //get为一个等待过程,异常中止get会抛出异常
} catch (ExecutionException e) {
e.printStackTrace(); //submit计算出现异常
} catch (TimeoutException e) {
e.printStackTrace(); //超时异常
future.cancel(true); //超时后取消任务
}finally {
poll.shutdown();
}
}
}
F. android中如何获取超时时长的异常
android获取超时时长的异常方式如下:设置超时机制
client.getParams().setIntParameter(
HttpConnectionParams.SO_TIMEOUT, TIME_OUT_DELAY); // 超时设置
client.getParams().setIntParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, TIME_OUT_DELAY);// 连接超时
这里设置了两种超时,第一种是请求超时,第二种时连接超时。
当向服务器发出请求后,请求和服务器建立socket连接,但是很长时间内都没有建立socket连接,这就时第一种请求超时,这种情况主要发生在请求了
一个不存在的服务器。超时之后,会抛出InterruptedIOException异常。
Timeout for blocking operations. The argument value is specified in
milliseconds. An InterruptedIOException is thrown if this timeout
expires.
G. 如何利用Guava实现方法调用超时自动中断
在实际的开发中,我们会经常遇见一些这样的情景,
(1)对于突发高并发下环境下,服务器压力很大的情况下,调用某些方法超过100ms不响应,应自动拒绝服务,而不是一直阻塞下去,直至服务器崩溃,算是一种变相的服务降级
(2)对于不可预知可能出现死锁的代码,加上时间阈值限制,避免无限制资源竞争
(3)对于不可预知可能出现死循环的代码,加上时间阈值监控,避免死循环恶化
对于一些成熟的开源框架一般都会带有超时响应这种功能,比如
搜索框架:Lucene,Solr,ElasticSearch,
RPC框架:Dubbo,Thrift,
服务协调框架:Zookeeper 等
如果是我们自己开发的服务,想要加入这种功能,应该怎么做呢?
其实也不难,在方法的调用前后加入加入计时功能,如果超过阈值,应主动终止线程,抛出异常代码,当然,为了不影响主服务运行,这段代码,应该独立运行在一个子线程中,而不是耦合在主线程中。思路大致如此,当然为了不重复造轮子,建议使用Google开源的Guava工具包,里面提供了许多有用的功能,包括这次介绍的超时方法自动终止功能,还有一些限制网络流量,或者限制在规定时间内的访问次数的功能,这里就不一一说明了,感兴趣的朋友,可以自行看Guava的文档。
TimeLimiter 是个接口,下面有两个子类,
FakeTimeLimiter, 常用于debug时,限制时间超时调试
SimpleTimeLimiter 常用于正式方法中,调用方法超时,即抛出异常
重点介绍下SimpleTimeLimiter的使用,这个类里面主要有2个方法:
(1)newProxy 通过JDK动态代理配合callWithTimeout实现超时拦截
(2)callWithTimeout 通过Callable回调,实现超时拦截
两者的不同之初在于,通过代理方式实现的策略,可以对这个类里面每一个被调用的方法,实行超时拦截
而通过回调实现的策略,适用于仅仅对某一个代码块或者方法,实行超时拦截。
通过maven引入最新的guava包:
Java代码
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
A:基于代理模式实现的拦截:
由于Guava采用的是JDK动态代理的方式实行AOP拦截,所以要求代理类必须有一个接口实现,所以用起来稍显麻烦,
我们先需要定义一个接口,然后定义实现类,重写需要调用的方法:
B:基于回调的用法,比较简单,因为不需要使用代理模式
两种方式都能实现方法调用超时中断,代理方式适合用于类级别的方法超时中断,而基于回调的方式
则比较适合任意的单个方法使用。
H. 如何解决高并发,连接等待超时的异常
如果你的并发确实超过 20 个,那么加大并发 active 是必须的,除非你接受列长时间的等待(这个是刚需)
如果你只是 21 个线程,但不是并发超过20个需求(也就是线程激活,但不一定在处理需求,可能是等待),那么你应该在每个线程的需求处理完成之后及时关闭连接(也就是让连接回到连接池,让其他线程可以用)
I. 如何处理C#的HttpWebResponse的GetResponse中的超时异常
超时异常,可以设置请求对象的Timeout属性,设置长一点,另外,检查服务器后台是否有错误。
报错可以用异常捕获
try
{
resp = (HttpWebResponse)req.GetResponse();
}
catch (WebException webEx)
{
//webEx.StatusEx.Status是错误的状态
if (webEx.Status == WebExceptionStatus.Timeout)
{//这里写处理错误方法
}
}
J. 如何使用Java的Runtime.exec时添加一个超时值
首先说点Runtime类吧,他是一个与JVM运行时环境有关的类,这个类是Singleton的。我说几个自己觉得重要的地方。
1、Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法。
2、Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法。
3、 Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调用 Runtime.exit()来退出JVM的,这里说明一下Java对Runtime返回值的一般规则(后边也提到了),0代表正常退出,非0代表异常中 止,这只是Java的规则,在各个操作系统中总会发生一些小的混淆。
4、Runtime.addShutdownHook()方法可以注册一个hook在JVM执行shutdown的过程中,方法的参数只要是一个初始化过但是没有执行的Thread实例就可以。(注意,Java中的Thread都是执行过了就不值钱的哦)
5、 说到addShutdownHook这个方法就要说一下JVM运行环境是在什么情况下shutdown或者abort的。文档上是这样写的,当最后一个非 精灵进程退出或者收到了一个用户中断信号、用户登出、系统shutdown、Runtime的exit方法被调用时JVM会启动shutdown的过程, 在这个过程开始后,他会并行启动所有登记的shutdown hook(注意是并行启动,这就需要线程安全和防止死锁)。当shutdown过程启动后,只有通过调用halt方法才能中止shutdown的过程并退 出JVM。