1

すぐにメッセージを返し、バックグラウンドで実行するプロセスを開始してタスクを終了することで、GET に応答できるようにしたいと考えています。これは、BaseHTTPServer.HTTPServer および BaseHTTPRequestHandler の拡張で正常に機能します。ただし、こちらの手順に従ってサーバーに SSL を追加すると、サブプロセスが完了するまで応答が送信されません。Firefox が受信したものをそのまま表示していると仮定し、Firebug で再確認すると、サブプロセスが完了するまで何も送信されないように見えます。Chrome でテストしたところ、同じ結果が得られました。以下のコード。デバッグを続行する方法がわかりません。

class SecureHTTPServer(HTTPServer):
  def __init__(self, server_address, HandlerClass):
    BaseServer.__init__(self, server_address, HandlerClass)
    ctx = SSL.Context(SSL.SSLv3_METHOD)
    ctx.use_privatekey_file(SSL_CERT)
    ctx.use_certificate_file(SSL_CERT)
    self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type))
    self.server_bind()
    self.server_activate()
  def shutdown_request(self, request):
    request.shutdown()

class RecordingHandler(BaseHTTPRequestHandler):
  def setup(self):
    self.connection = self.request
    self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
    self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
  def do_GET(self):
    key = 'abc'
    p = Process(target = some_func, args = (key,))
    # Some_func takes ~15 seconds to complete, and it logs its progress so that it's clear that the response is only sent after some_func is complete.
    p.daemon = True
    p.start()
    self.send_response(200)
    self.end_headers()
    self.wfile.write('recording key ' + key)

def run():
  try:
    server = SecureHTTPServer(('', 8080), RecordingHandler)
    print 'Waiting for input on port 8080.'
    server.serve_forever()
  except KeyboardInterrupt:
    print 'Received keyboard interrupt, exiting.'
    server.shutdown()
4

1 に答える 1

0

どうやら、あきらめて再起動し、もう一度グーグルを試す必要があったようです。私はこの解決策を見つけました:

import BaseHTTPServer, SimpleHTTPServer
import ssl

httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='path/to/localhost.pem', server_side=True)
httpd.serve_forever()

以前のセットアップで何が問題だったのかはまだわかりませんが、これは問題なく機能します。

于 2013-06-23T02:47:10.873 に答える