簡體   English   中英

Twisted AMP Deferred應該如何取消?

[英]How should a Twisted AMP Deferred be cancelled?

我有一個Twisted客戶端/服務器應用程序,其中一個客戶端要求多個服務器使用AMP完成其他工作。 第一個響應客戶端的服務器獲勝-其他未解決的客戶端請求應被取消。

Deferred對象支持cancel()並且可以將Cancellor函數傳遞給Deferred的構造函數。 但是,AMP的sendRemote() API不支持傳遞取消函數。 另外,我希望cancellor函數不僅在完成時停止處理本地請求,而且希望從遠程服務器中刪除該請求。

AMP的BoxDispatcher確實有一個stopReceivingBoxes方法,但是這會導致所有延期錯誤(不是我想要的)。

有沒有辦法取消AMP請求?

否。目前無法取消AMP請求。

您無法取消AMP請求,因為AMP在有線協議級別沒有定義將消息發送到遠程服務器以告知其停止處理的方式。 對於AMP來說,這將是一個有趣的功能添加,但是如果要添加它,則不會通過允許用戶傳遞自己的抵消器來添加它。 相反,AMP本身必須創建發送“取消”命令的取消功能。

最后,添加此功能必須非常小心,因為一旦發送了請求,就無法保證不會完全處理該請求。 通常有很好的機會,到對端收到並處理取消請求時,對端已經完成處理並發送了回復。 因此,AMP應該實現異步取消。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM