zoukankan      html  css  js  c++  java
  • 史上最简单的带流控功能的http server

    s.py

    import time
    import SimpleHTTPServer
    import SocketServer
    
    BYTES_PER_SECOND=160*1024
    
    class MyHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
        def do_GET(self):
            """Serve a GET request."""
            f = self.send_head()
            if f:
                self.copyfileobj(f, self.wfile)
                f.close()
        def copyfileobj(self,fsrc, fdst, length=16*1024):
            """copy data from file-like object fsrc to file-like object fdst"""
            count = 0
            t1 = time.time()
            while 1:
                buf = fsrc.read(length)
                if not buf:
                    break
                fdst.write(buf)
                count += len(buf)
                if count >= BYTES_PER_SECOND:
                    count = 0
                    delay = 1.0 - (time.time() - t1)
                    if delay > 0.0:
                        time.sleep(delay)
                    t1 = time.time()                
    PORT = 8000
    Handler = MyHTTPRequestHandler
    httpd = SocketServer.TCPServer(("127.0.0.1", PORT), Handler)
    print "serving at port", PORT
    httpd.serve_forever()
    



    yes,that's it! 总共三十几行代码。BYTES_PER_SECOND用于指定每秒传输的最大字节数。127.0.0.1 是服务器监听的IP。8000为http server监听的port。

      

    这就是为什么写python程序是一种享受的原因。号称battery include的python,人用人爱的python。

    可是python也由此给人一种误解,仅仅能写功能简单的程序。写不了高大上的程序,事实上真的是一种非常大的误解。

    配合上DNSserver,这个30行的程序能够作为一个不错的升级測试环境。

    另外,顺便说一句,假设是在linux以下,port号假设小于1000的话执行程序是要系统权限的,要不然会抛异常。

  • 相关阅读:
    node设置跨域白名单
    vueInitVux中引入bootstrap、jquery步骤
    npm命令集合
    css横屏问题的设置
    verdaccio启动命令
    拖拽上传文件在火狐中会打开新窗口
    vue监听input输入框限制输入长度
    axios get请求传递参数 es6语法
    export default和export的使用
    webpack中如何使用vue
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3855160.html
Copyright © 2011-2022 走看看