如何修复此错误googleApp引擎错误10054

时间:2012-10-04 09:41:56

标签: python google-app-engine networking webserver localhost

我在我的服务器上使用谷歌应用程序引擎(监听--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]

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

在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