1

我在我的服务器上使用谷歌应用引擎(听 --address=0.0.0.0 所有网络)我的应用程序在短时间内纠正(我得到一些用户输入,一些进程,显示数据并插入 mysql db)在我出现这个错误之后消息和网络浏览器没有显示任何内容,我的系统:谷歌应用引擎,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]
4

2 回答 2

2

尝试切换到更严肃的网络框架,而不是基于玩具 HTTP 服务器(BaseHTTPServer 是玩具 HTTP 服务器)。

10054 是 Windows 错误 ECONNRESET。这表明您的 HTTP 服务器尝试读取的连接已关闭。这不完全是错误情况 - 连接被关闭,这是它们生命周期的正常部分 - 但您使用的 Google AppEngine(开发!)服务器似乎将其视为错误。也许这样做最终也会错误地响应其他请求。

一个正确的 HTTP 服务器处理这种情况不会有问题。

于 2012-10-04T10:56:17.963 回答
1

AppEngine 开发服务器确实非常有限(单线程,仅限 HTTP 1.0,对连接重置不可靠),但它是在本地开发中模拟的唯一选择。环境 生产服务器的行为,包括 AppEngine 服务的存根和某些模块(包括ossocket)的沙盒。

在 Google 为我们提供更强大的替代方案之前,我在handle_one_request方法中为预期的套接字错误添加了异常处理程序BaseHTTPServer.py(位于LibPython 安装目录的子目录中)

[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 问题 14574

于 2012-10-19T17:25:38.267 回答