1

是否有可能以某种方式取消 xmlrpc 客户端请求?

假设在一个线程中我有如下代码:

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

我不是说某种超时...有时从另一个线程我可以得到事件来取消我的工作。然后我需要取消这个请求。

我知道我可以做到这一点,twisted但是是否可以使用标准 xmlrpclib 做到这一点?

4

2 回答 2

2

首先,它必须在服务器端实现,而不是在客户端(xmlrpclib)。如果您只是中断对 XML-RPC 服务器的 HTTP 请求,则不能保证在服务器上运行的长时间进程完全会被中断。所以 xmlrpclib 就是不能有这个功能。

如果要实现此行为,则需要创建两种类型的请求。第一种类型的请求将告诉您的服务器开始一些漫长的过程。它必须在后台(在另一个线程或进程中)执行,并且您的 XML-RPC 服务器必须立即向客户端发送响应(“进程已启动!”)。当您想停止进程时,客户端必须发送另一个请求,告诉您的服务器停止执行进程。

于 2012-05-09T19:42:52.533 回答
1

是的,如果你想做非常肮脏的黑客攻击......

基本上,ServerProxy 对象保留了底层套接字/http 连接的句柄。如果您进入这些内部并简单地关闭()套接字,您的客户端代码将因异常而崩溃。如果你处理得当,你的取消。

如果您通过传输参数为 ServerProxy 注册自己的传输类并为其提供一些执行您想要的取消方法,您可以做得更理智一点。

这不会阻止服务器处理事情,除非它对直接关闭通道做出反应。

于 2012-05-09T19:51:27.733 回答