gpt4 book ai didi

python - SimpleXMLRPCServer 请求调度问题

转载 作者:数据小太阳 更新时间:2023-10-29 02:46:28 25 4
gpt4 key购买 nike

我们正在开发基于客户端-服务器 XML-RPC 的应用程序。服务器部分应该根据请求知道每个客户端的 IP 地址。

为了实现这一点,我们将 SocketServer.ThreadingMixIn 混合到 SimpleXMLRPCServer 和子类 SimpleXMLRPCRequestHandler 中以重新定义它的 _dispatch 方法。下面是代码:

class ThreadedXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
pass

class RequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
def _dispatch(self, method, params):
function = self.server.funcs[method]

def decor(function, ip_addr):
def new_function(*args):
try:
return function(ip_addr, *args)
except Exception, err:
log_msg('Exception ocurred in XMLRPC thread (%s)!' % err)

return new_function

return decor(function, self.client_address[0])(*params)

问题是有时候请求的IP地址和请求的数据都是混在一起处理的,i. e.请求的 IP 地址与其真实地址不匹配。

_dispatch 的最后一行有问题还是我们遗漏了什么?

谢谢!

最佳答案

您应该重新引发在您的自定义 _dispatch 方法中调用 function(ip_addr ...) 遇到的任何异常,否则您可能会短路内置 -在错误处理中。

这就是我的意思......

class RequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
def _dispatch(self, method, params):
function = self.server.funcs[method]

def decor(function, ip_addr):
def new_function(*args):
try:
return function(ip_addr, *args)
except Exception, err:
log_msg('Exception ocurred in XMLRPC thread (%s)!' % err)
raise # <---- re-raise

return new_function

...不过,如果它与您的问题有关,我会感到惊讶。据我所知,您所拥有的应该可以正常工作。

出于好奇,如果您改为继承 ForkingMixin 会发生什么情况?

关于python - SimpleXMLRPCServer 请求调度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6506206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com