Я разрабатываю игру на основе HTTP-сервера в Python. План состоит в том, чтобы иметь как можно меньше зависимостей, поэтому я хотел, чтобы он работал без установки отдельного веб-сервера (например, Apache, Lighttpd или nginx). Проблема в том, что это не работает.
Пробовал следующие версии:
- BaseHTTPServer.HTTPServer (+SocketServer.ThreadingMixIn)
- wsgiref.simple_server
- скрученный.веб-сервер
При большой нагрузке (siege -b -c 100 -t 30s
) все они частично вышли из строя либо с
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
or
[error] socket: -1313092800 address is unavailable.: Cannot assign requested address
Под частично я подразумеваю: какие-то запросы были обслужены, какие-то нет.
С другой стороны, когда я пробовал Lighttpd + Flask (т.е. WSGI) или даже Lighttpd + PHP (просто в качестве контроля), все работало абсолютно нормально. Доступность 100%, параллелизм 100%.
Из-за последних рабочих версий, полагаю, проблема не в siege
, или в запуске siege
и сервера на одной машине, или в самой машине (кстати Ubuntu 12.04).
ПРИМЕЧАНИЕ: во всех случаях я тестировал простые серверы «hello world», чтобы свести к минимуму возможность ошибок.
Итак, два моих вопроса:
- Почему веб-серверы Python нестабильны? (Что именно является причиной, а не решением?)
- Является ли использование автономного веб-сервера + Python единственным/лучшим решением (если я придерживаюсь Python) или я что-то упускаю?