取消 xmlrpc 客户端请求



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

假设在一个线程中,我有这样的代码:

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

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

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

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

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

是的,如果你想做真正肮脏的黑客......

基本上,ServerProxy 对象保留了底层套接字/http 连接的句柄。如果你进入这些内部并简单地关闭()套接字,你的客户端代码就会爆炸并出现异常。如果您正确处理这些,则取消。

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

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

最新更新