首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleXMLRPCServer请求调度问题

SimpleXMLRPCServer请求调度问题
EN

Stack Overflow用户
提问于 2011-06-28 20:12:30
回答 1查看 682关注 0票数 3

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

为此,我们将SocketServer.ThreadingMixIn混合到SimpleXMLRPCServer和SimpleXMLRPCRequestHandler子类中,以重新定义它的_dispatch方法。代码如下:

代码语言:javascript
复制
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的最后一行有什么问题吗?还是我们漏掉了什么?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-08-14 14:48:20

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

我的意思是..。

代码语言:javascript
复制
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的子类,会发生什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6506206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档