Python で HTTP サーバー ベースのゲームを開発しています。依存関係をできるだけ少なくする計画なので、スタンドアロンの Web サーバー (Apache、Lighttpd、nginx など) をインストールせずに動作するようにしたかったのです。問題は、それが機能しないことです。
次のバージョンを試しました。
- BaseHTTPServer.HTTPServer (+SocketServer.ThreadingMixIn)
- wsgiref.simple_server
- twisted.web.server
高負荷 ( siege -b -c 100 -t 30s
) の下に置くと、いずれかで部分的に失敗しました。
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
また
[error] socket: -1313092800 address is unavailable.: Cannot assign requested address
部分的に私が意味するのは、一部のリクエストは処理され、一部は処理されなかったということです。
一方、Lighttpd + Flask (つまり WSGI) または Lighttpd + PHP (コントロール ケースとして) を試してみたところ、まったく問題なく動作しました。可用性 100%、同時実行性 100%。
後者の動作バージョンのため、問題は、同じマシン上でsiege
実行siege
されているサーバー、またはマシン自体 (ちなみに Ubuntu 12.04) ではないと思います。
注: すべてのケースで、単純な「hello world」サーバーをテストして、バグの可能性を最小限に抑えました。
だから私の2つの質問:
- Python ウェブサーバーが不安定なのはなぜですか? (解決策ではなく、正確には原因は何ですか?)
- スタンドアロン Web サーバー + Python を使用することが唯一の/最良の解決策 (Python に固執する場合) ですか、それとも何か不足していますか?