代码之家  ›  专栏  ›  技术社区  ›  TimothyP

在Python中结合SimpleXMLRPCServer和BaseHTTPRequestHandler

  •  3
  • TimothyP  · 技术社区  · 14 年前

    但它们都必须在不同的端口上侦听,这意味着不同的域。

    有没有办法创建一个可以在本地主机的一个端口上监听的东西

    现在我有两种不同的服务:

    httpServer = HTTPServer(('localhost',8001), HttpHandler);
    xmlRpcServer = SimpleXMLRPCServer(('localhost',8000),requestHandler=RequestHandler)
    

    更新

    • 我无法在设备上安装Apache
    • 唯一的客户端将是python服务自身运行的设备
    3 回复  |  直到 14 年前
        1
  •  2
  •   Wai Yip Tung    14 年前

    它们都是 SocketServer.TCPServer . 必须有某种方法来重构它们,这样一旦服务器实例可以分派给两者。

    一个更简单的选择可能是保持 HTTPServer 在前面和代理XML-RPC到 SimpleXMLRPCServer 实例。

        2
  •  2
  •   TimothyP    14 年前

    根据伟业董的回答,解决办法其实很简单:

    我所要做的就是继续使用SimpleXMLRPCServer实例,

    class RequestHandler(SimpleXMLRPCRequestHandler):
        rpc_paths = ('/RPC2',)
    
        def do_GET(self):
              #implementation here
    

    这将导致处理程序响应GET请求以及原始POST(XML-RPC)请求。

        3
  •  0
  •   leoluk    14 年前

    使用 HTTPServer 因为提供内容不是个好主意。您应该使用像Apache这样的web服务器,并使用Python作为CGI(或者更高级的接口,如 mod_wsgi

    然后,Web服务器在一个端口上运行,您可以直接在Web服务器上运行HTML,并在Python中编写任意数量的CGI脚本,例如使用 CGIXMLRPCRequestHandler

    class MyFuncs:
        def div(self, x, y) : return x // y
    
    
    handler = CGIXMLRPCRequestHandler()
    handler.register_function(pow)
    handler.register_function(lambda x,y: x+y, 'add')
    handler.register_introspection_functions()
    handler.register_instance(MyFuncs())
    handler.handle_request()