1

我有一个 Twisted 客户端/服务器应用程序,其中客户端要求多个服务器使用 AMP 完成额外的工作。第一个响应客户端的服务器获胜——其他未完成的客户端请求应该被取消。

Deferred对象支持cancel()和取消函数可以传递给Deferred的构造函数。但是,AMP 的sendRemote()api 不支持传递取消函数。此外,我希望取消函数不仅在完成后停止处理本地请求,而且还从远程服务器中删除请求。

AMPBoxDispatcher确实有一个stopReceivingBoxes方法,但这会导致所有延迟出错(不是我想要的)。

有没有办法取消 AMP 请求?

4

1 回答 1

2

不,目前无法取消 AMP 请求。

您无法取消 AMP 请求,因为 AMP 中没有在线协议级别定义向远程服务器发送消息告诉它停止处理的方法。这将是 AMP 的一个有趣的功能添加,但如果要添加它,您不会通过允许用户传入他们自己的取消器来添加它;相反,AMP 本身必须创建一个发送“取消”命令的取消函数。

最后,添加此功能必须非常小心,因为一旦发送请求,就不能保证它不会被完全处理;通常情况下,当远程端收到并处理取消请求时,远程端已经完成处理并发送了回复。所以AMP应该实现异步取消。

于 2015-07-08T23:02:25.483 回答