【问题标题】:how can fix this error googleApp engine error 10054如何解决此错误 googleApp 引擎错误 10054
【发布时间】:2012-09-25 07:47:10
【问题描述】:

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

【问题讨论】:

  • 尝试其他浏览器。由于 Chrome 的“预取”模式,Chrome 可能会导致单线程应用程序出错。您可以在 Chrome 中关闭该模式。

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


【解决方案1】:

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

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

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

【讨论】:

  • 嗯,问题在于他试图将 AppEngine 开发服务器作为真正的服务器运行。它不是一个,也从不假装是:它只用于本地开发。
  • 这就是为什么我建议他停止使用玩具 HTTP 服务器!也许他应该切换到 Google 的真实 AppEngine 部署。大概这更值得生产?我不知道,但我想我们可以同意他现在使用的是玩具。
  • 您有什么建议?哪个基于 python 的 web 框架,web2py django 金字塔
  • 我自己(也是开发人员之一)是 Twisted 的忠实粉丝。在某种程度上,选择取决于您的应用程序需要做什么。但如果 Twisted 本身不能提供足够的工具来简化任务,那么运行在 Twisted Web 的 WSGI 容器上的 Django 可能会。
【解决方案2】:

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

在 Google 为我们提供更强大的替代方案之前,我在 BaseHTTPServer.pyhandle_one_request 方法(位于 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 了解详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2017-10-06
    • 2017-12-12
    • 2012-02-14
    • 2015-04-12
    • 2016-06-21
    • 2020-11-16
    相关资源
    最近更新 更多