代码之家  ›  专栏  ›  技术社区  ›  Mars

python httpserver[winerrror10053]请求太多时?

  •  1
  • Mars  · 技术社区  · 6 年前

    运行一个超级简单的Web服务器,在大多数情况下,只需要从第三方脚本的请求中删除查询信息并返回一些文件:

    def run(server_class=HTTPServer, handler_class=MyHandler, port=xxx):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    print ('Starting httpd...')
    httpd.serve_forever()
    

    服务器必须返回的一个对象是一个HTML页面,该页面随后加载一些javascript,然后加载 three.js ,然后继续从同一服务器加载大量对象。

    这是可行的,但在重新加载1-5次后,通常会导致 WinError[10053] 服务器锁定了!之后,连接将被拒绝或超时。不确定这是因为请求太多,还是与三个.js加载函数的连接有关。

    这花了几个小时,我找不到具体的解决方案,所以我会在下面发布一个答案。请随意输入其他答案。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mars    6 年前

    通过对服务器/处理程序进行多线程处理,我至少能够处理一个用户。这可能仍然是吞吐量问题,但这已经足够了:

    class ThreadingHTTPServer(socketserver.ThreadingMixIn, HTTPServer):
        pass
    
    def run(server_class=ThreadingHTTPServer, handler_class=MyHandler, port=xxx):
        server_address = ('', port)
        httpd = server_class(server_address, handler_class)
        print ('Starting httpd...')
        httpd.serve_forever()
    

    我尝试/失败的其他一些事情:

    • 编辑self.path并调用simplehttpRequestHandler.do_get(self)//无法更改路径以影响简单处理程序
    • allow_reuse_address =真/假//无效
    • 手动设置 close_connection =真//无效果
    • 一些头球进攻//没有效果

    希望这能救一个人!