取消 xmlrpc 客户端请求?

Posted

技术标签:

【中文标题】取消 xmlrpc 客户端请求?【英文标题】:Cancel xmlrpc client request? 【发布时间】:2012-05-06 20:50:08 【问题描述】:

是否有可能以某种方式

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

是的,如果你想做一些非常肮脏的黑客行为......

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

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

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

【讨论】:

以上是关于取消 xmlrpc 客户端请求?的主要内容,如果未能解决你的问题,请参考以下文章

PHP xmlrpc 客户端和 Python 2.5 xmlrpc 服务器:不完整的数据和由对等错误重置的连接

如何让 ruby​​ 的 xmlrpc 客户端忽略 SSL 证书错误?

使用 XMLRPC 将文件从客户端发送到服务器?

CookComputing XmlRpc客户端-如何获取带有时区的日期时间[重复]

Qt(PyQt)事件循环中的xmlrpc?

Python 的 xmlrpc 非常慢:每次调用一秒钟