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。