账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    用http.server模块写了个简单的HTTP服务,用浏览器访问的时候延迟极高!
    28
    0

    我就是随手实验了一下,并没有写什么逻辑:

    class DemoHttpServer(BaseHTTPRequestHandler):
        """http.server模块实验
    
        GET:
            仅首页,返回一条Json信息
        """
        TODO = ['You get the response!!']
    
        def do_GET(self):
            if self.path != '/':
                self.send_error(404, "Page not Found!")
                return
    
            resp = json.dumps(self.TODO)
    
            self.send_response(200, message='OK')
            self.send_header('Content-Type', 'application/json')
            self.end_headers()
            self.wfile.write(resp.encode())
            
            
    if __name__ == '__main__':
        server = HTTPServer(('localhost', 8008), DemoHttpServer)
        print('Server is running, user <Ctrl+C> to srop.')
        server.serve_forever()

    用chrome访问的时候有一项 'Waitting (TTFB)'时间高达十几秒!!!
    但是用别的浏览器或者postman之类的就很正常。请问是什么原因,chrome做了什么?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 小沙橘 普通会员 1楼

      在Python中,我们可以使用http.server模块来创建一个简单的HTTP服务器,然后使用subprocess模块来实现浏览器的延迟高问题。以下是一个简单的示例,这个服务将处理GET请求并返回一个JSON响应,当浏览器等待JSON响应时,它将等待的时间设置为1秒。

      ```python import http.server import json import time import os

      PORT = 8080

      class SimpleHTTPRequestHandler(http.server.SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header("Content-type", "application/json") self.end_headers() self.wfile.write(json.dumps({"result": "success"}))

      def run(self):
          server_address = ("localhost", PORT)
          httpd = http.server.HTTPServer(server_address, SimpleHTTPRequestHandler)
          httpd.serve_forever()
      

      if name == "main": httpd = http.server.HTTPServer(("", PORT), SimpleHTTPRequestHandler) httpd.serve_forever() ```

      在这个示例中,我们创建了一个名为SimpleHTTPRequestHandler的类,它继承自http.server.SimpleHTTPRequestHandler,并重写了do_GET方法。在这个方法中,我们首先设置响应状态码为200,然后设置响应头部为"Content-type"为"application/json",然后将响应数据写入wfile,最后将响应数据写入httpd.serve_forever()方法中,表示服务器将一直运行。

      当浏览器发送一个GET请求到http://localhost:8080时,服务器将等待1秒后返回一个包含"result"属性为"success"的JSON响应。请注意,这个示例假设服务器在启动时将设置一个固定的时间间隔,即1秒。如果服务器需要处理请求的速度更快,例如在前端请求中,可以使用像setTimeoutsetInterval这样的函数来实现延迟。

      如果浏览器无法等待1秒,那么服务器将返回一个错误响应,显示超时信息。为了实现这个功能,你可以在SimpleHTTPRequestHandler类的run方法中添加以下代码:

      python try: time.sleep(1) except KeyboardInterrupt: httpd.shutdown()

      这个方法尝试在1秒后自动停止服务器。如果在1秒内键盘被按下,KeyboardInterrupt异常将捕获并停止服务器。这样,浏览器将无法继续等待1秒,服务器将立即返回错误响应。

      请注意,这只是一个基本的示例,实际的HTTP服务器可能需要处理更复杂的请求,例如POST、PUT、DELETE等,以及处理文件上传、客户端请求、SSL/TLS等。此外,为了实现浏览器的延迟低,你可能需要使用一些库或框架,如Flask、Django、WebSockets等,这些库或框架提供了更高级的HTTP服务器处理功能,例如缓存、多线程、异步处理等。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部