2011-04-07 47 views
2

是否可以中止Flex RemoteObject調用?我想下面的方法,但HTTP請求在後臺仍在加載:中止RemoteObject調用

var r:RemoteObject = new RemoteObject('<myDestination>'); 
r.source('myClass'); 
r.myMethod.addEventListener(ResultEvent.RESULT, myResponse); 

r.myMethod(); // lets say this method takes 5 second to call 

r.channelSet.disconnectAll(); // I thought this would abort the actual HTTP request but its still running 

編輯

我感興趣的是解放了瀏覽器的HTTP管道,就像在JavaScript凡事你可以在XHR上使用中止。

+0

你的問題實際上不是在彈性方面,而是在服務器方面。我更新了我的答案。 – ktutnik 2011-04-11 21:23:06

回答

4

你可以試試cancel()方法AbstractOperation

r.getOperation("OperationName").cancel(); 

UPDATE:

這是問題,我調用了大量的呼叫,然後在用戶離開視圖,以便我不需要等待響應了。現在,http請求阻止了任何進一步的請求。有任何解決方案嗎?

你應該在你的服務器端服務中做另一個操作來停止當前的服務。那麼當您需要中止當前正在運行的服務時,請取消該操作(在flex上),然後通過從flex側調用停止服務來調用停止服務。

要停止服務器端的當前運行線程,取決於您使用的服務器端。

+0

如何找出操作名稱? – Dennis 2011-04-07 10:49:08

+1

這將是'myMethod' – 2011-04-07 16:53:20

+0

@Denis:你應該知道你想取消哪個服務器端操作。這是必需的。您只需要在字符串中指定名稱 – ktutnik 2011-04-08 03:12:08

1

請注意,通過操作取消它只會影響Flex客戶端 - 您的響應者永遠不會被調用。在服務器端,請求運行正常(消耗資源直到結束),並且您必須編寫一些自定義代碼才能避免這種情況。

+0

這就是問題,我調用一個大的調用,然後用戶離開視圖,所以我不需要等待響應了。現在,http請求阻止了任何進一步的請求。有任何解決方案嗎? – Dennis 2011-04-11 19:35:11

+0

在服務器端,您的請求由應用程序服務器在線程上執行,並且不應該阻止任何其他請求(這些請求在不同線程上執行)。它可以阻止其他請求,如果它需要大量的CPU(我認爲在多核CPU上不是這種情況),或者因爲它在另一個資源(如數據庫表,文件等)上需要一些排它鎖。你的情況發生了什麼?有解決方案但不是通用解決方案,它們取決於您的具體使用情況。你在服務器端的請求中做什麼? – 2011-04-12 07:22:49

+0

我想我誤解了你,瀏覽器的HTTP Pipelining被阻塞了。 – Dennis 2011-04-12 08:02:57