我正在用 Python 开发一个基于 HTTP 服务器的游戏。计划是尽可能少的依赖,所以我希望它在不安装独立网络服务器(如 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
或者
[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),还是我错过了什么?