我在我的服务器上使用谷歌应用程序引擎(监听--address = 0.0.0.0所有网络)我的应用程序短时间纠正(我获得一些用户输入,一些进程,显示数据并插入mysql数据库)后我拿这个错误信息和网络浏览器没有显示任何东西,我的系统:谷歌应用程序引擎,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]
答案 0 :(得分:2)
尝试切换到更严肃的网络框架,而不是基于玩具HTTP服务器(BaseHTTPServer是玩具HTTP服务器)。
10054是Windows错误ECONNRESET。这表示HTTP服务器尝试读取的连接已关闭。这不是一个错误的条件 - 连接关闭,这是它们生命周期的正常部分 - 但是您正在使用的Google AppEngine(开发!)服务器似乎将其视为错误。也许在这样做时,它最终也会错误地响应其他请求。
正确的HTTP服务器在处理这种情况时不会有问题。
答案 1 :(得分:1)
AppEngine开发服务器确实非常有限(单线程,仅限HTTP 1.0,对连接重置不健壮),但它是在本地开发中模拟的唯一选项。环境生产服务器的行为,包括AppEngine服务的存根和某些模块的沙箱(包括os
和socket
)。
在Google为我们提供更强大的替代方案之前,我在handle_one_request
BaseHTTPServer.py
方法(位于Python安装的Lib
子目录中为预期的套接字错误添加了异常处理程序目录)
[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 issue 14574。