1

私は自分のサーバーでGoogleアプリエンジンを使用しています(listen --address=0.0.0.0 all network)私のアプリケーションは短時間で修正します(ユーザー入力、プロセスを取得し、データを表示し、mysql dbを挿入します)このエラーが発生した後メッセージと Web ブラウザーに何も表示されませんでした。私のシステム: Google アプリ エンジン、Python 2.7、mysql (rdbms 経由) ポートを変更する (8080,8091,8090vs...) またはアプリ エンジンを再起動すると、私のアプリケーションは再び機能しますが、その後その後、再び同じエラーメッセージ

Traceback (most recent call last):
  File "C:\Python27\lib\SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2734, in __init__
    BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  File "C:\Python27\lib\SocketServer.py", line 639, in __init__
    self.handle()
  File "C:\Python27\lib\BaseHTTPServer.py", line 343, in handle
    self.handle_one_request()
  File "C:\Python27\lib\BaseHTTPServer.py", line 313, in handle_one_request
    self.raw_requestline = self.rfile.readline(65537)
  File "C:\Python27\lib\socket.py", line 476, in readline
    data = self._sock.recv(self._rbufsize)
error: [Errno 10054]
4

2 に答える 2

2

おもちゃの HTTP サーバーに基づいていない、より本格的なネットワーク フレームワークに切り替えてみてください (BaseHTTPServer はおもちゃの HTTP サーバーです)。

10054 は Windows エラー ECONNRESET です。これは、HTTP サーバーが読み取ろうとしている接続が閉じられたことを示します。これは正確にはエラー状態ではありません-接続が閉じられ、ライフサイクルの通常の部分です-しかし、使用しているGoogle AppEngine(開発!)サーバーはそれをエラーとして扱っているようです. おそらく、そうすることで、他の要求にも正しく応答しなくなる可能性があります。

正しい HTTP サーバーでは、この状況を問題なく処理できます。

于 2012-10-04T10:56:17.963 に答える
1

AppEngine開発サーバーは確かにかなり制限されています(シングルスレッド、HTTP 1.0のみ、接続のリセットに対して堅牢ではありません)が、ローカル開発でエミュレートするための唯一のオプションです。環境AppEngineサービスへのスタブや一部のモジュール(osおよびを含むsocket)のサンドボックス化を含む、本番サーバーの動作。

Googleがより堅牢な代替手段を提供するまで、(Pythonインストールディレクトリのサブディレクトリにある)handle_one_requestメソッドで予想されるソケットエラーの例外ハンドラーを追加しました。BaseHTTPServer.pyLib

[end of BaseHTTPServer.py::handle_one_request() - Python 2.7]
  except socket.error as socket_error:
    import errno
    if socket_error.errno in (errno.ECONNABORTED, errno.WSAECONNABORTED, errno.ECONNRESET, errno.WSAECONNRESET):      
      pass
    else:
      raise

ECONNABORTED/WSAECONNABORTEDはリモート切断で発生しています-詳細については、 Pythonの問題14574を参照してください。

于 2012-10-19T17:25:38.267 に答える