Разработвам базирана на HTTP сървър игра в Python. Планът е да има възможно най-малко зависимости, така че исках да работи без инсталиране на самостоятелен уеб сървър (като 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
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), или пропускам нещо?