2012-05-06 119 views
1

是否有可能以某種方式取消xmlrpc客戶端請求?取消xmlrpc客戶端請求?

讓說,在一個線程我有這樣的代碼:

svr = xmlrpclib.ServerProxy('http://localhost:9092') 
svr.DoSomethingWhichNeedTime() 

我不是指某種超時......有時從另一個線程我可以讓事件取消我的工作。然後我需要取消這個請求。

我知道我可以用twisted做到這一點,但是可以用標準的xmlrpclib來做到嗎?

回答

2

首先,它必須在服務器端實現,而不是在客戶端(xmlrpclib)中實現。如果您只是簡單地中斷您對HTTP-RPC服務器的HTTP請求,則不能保證服務器上長時間運行的進程將被中斷。所以xmlrpclib就不能擁有這個功能。

如果要實現此行爲,您需要創建兩種類型的請求。第一種類型的請求會告訴您的服務器啓動一些長時間的過程。它必須在後臺執行(在另一個線程或進程中),並且您的XML-RPC服務器必須立即將響應(「Process started!」)發送給客戶端。當你想停止進程時,客戶端必須發送另一個請求,告訴你的服務器停止執行進程。

+0

是的,你說得對。 :) – Adam

1

是的,如果你想要做的非常髒的黑客....

基本上ServerProxy對象保持的句柄基礎套接字/ HTTP連接。如果你進入了這些內部部件,只需關閉()套接字,你的客戶端代碼就會發生異常。如果你正確處理它的取消。

如果您通過傳輸參數爲ServerProxy註冊自己的傳輸類併爲其提供一些取消方法,然後執行所需的操作,則可以更加理智。

這不會阻止服務器處理事物,除非它直接關閉通道。

+0

謝謝,但我會添加另一種方法到服務器代碼。 – Adam