我们正在开发基于客户端-服务器 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地址和请求数据都被混淆处理,即请求IP地址与它的真实地址不匹配。
_dispatch 的最后一行是否有问题或者我们遗漏了什么?
谢谢!