1

CGI のように Python を実行するプロセスを fork するのは、WSGI のように Python を埋め込むよりも遅いことはよく知られています。標準の Python ライブラリに含まれている SimpleXMLRPCServer を使用して XML-RPC インターフェイスを実装したいと考えています。CGI 経由で動作する実装が既にあります。もっと速い方法があるはずだと思います。WSGI を試してみたいのですが、まず WSGI のリクエスト ハンドラが必要ですが、SimpleXMLRPCServer にはまだないようです。私はすべて濡れていますか、それとも Python 2.6、2.7、3.x の標準ライブラリにはこれに相当するものはありませんか?

CGIXMLRPCRequestHandler の WSGI 置換の最初の実装を次に示します。

from xmlrpclib import SimpleXMLRPCDispatcher


class WSGIXMLRPCRequestHandler(SimpleXMLRPCDispatcher):
  """Simple handler for XML-RPC data passed through WSGI."""

  def __init__(self, allow_none = False, encoding = None):
    SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding)


  def __call__(self, environ, start_response):
    """Parse and handle a single XML-RPC request"""
    result  = []
    method  = environ['REQUEST_METHOD']
    headers = [('Content-type', 'text/html')]

    if method != 'POST':
      # Default implementation indicates an error because XML-RPC uses the POST method.
      code             = 400
      message, explain = BaseHTTPServer.BaseHTTPRequestHandler.responses[code]

      status = '%d %s' % (code, message)

      if method == 'HEAD':
        response = ''
      else:
        response = BaseHTTPServer.DEFAULT_ERROR_MESSAGE % {'code' : code, 'message' : message, 'explain' : explain}
    else:
      # Dispatch XML-RPC to implementation
      status   = '200 OK'
      request  = environ['wsgi.input'].read(int(environ['CONTENT_LENGTH']))
      response = self._marshaled_dispatch(request)

    length = len(response)

    if length > 0:
      result = [response]

    headers.append(('Content-length', str(length)))
    start_response(status, headers)

    return result
4

1 に答える 1

1

これを見てください それが役立つことを願っています.

于 2012-12-18T03:36:09.587 に答える