有這幾種情況我們需要異步調(diào)用。
1、如果一個任務(wù)需要很長的時間才能運(yùn)行完,而客戶端不想一直等待。當(dāng)然,純粹的只想避免客戶端UI等待,客戶端可以創(chuàng)建另一個線程來發(fā)起調(diào)用。但是這個調(diào)用的線程和服務(wù)器還是一直連接的,如果調(diào)用使用的TCP就是TCP一直在連接,但是對于遠(yuǎn)距離的網(wǎng)絡(luò),如internet,或不穩(wěn)定的網(wǎng)絡(luò),在調(diào)用期間很難說不會斷開連接,而這種RPC調(diào)用一旦斷開,調(diào)用就失敗。所以我們需要避免長時間的連接。
2、客戶端不需要馬上知道調(diào)用的結(jié)果,只是告訴服務(wù)器去做某件事情,而服務(wù)器會以別的方式告訴客戶端(如郵件)。
實現(xiàn)異步調(diào)用時,服務(wù)器先為每次調(diào)用分配一個ID(如GUID),然后再建立一個線程來執(zhí)行這個調(diào)用。客戶端未等調(diào)用結(jié)束就拿到了這個ID,然后它可以拿著這個ID向服務(wù)器詢問那個調(diào)用的執(zhí)行情況(正在做什么?進(jìn)度是多少?)??蛻舳藢ψ约寒惒秸{(diào)用的執(zhí)行情況的了解,可以是定時的輪詢(Pull),也可以接收服務(wù)器的通知,如,mail通知,或者如果服務(wù)器能主動訪問到客戶端,可以采用Push的方式直接告訴客戶端。
異步調(diào)用執(zhí)行完成時,在客戶端還沒有得到這個結(jié)果前,其結(jié)果還要保留一段時間(如10分鐘),如果超過這個時間客戶端還沒有來取,結(jié)果就扔掉。
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答??! 點擊進(jìn)入論壇