史上最简单的带流控功能的http server

来源:互联网 发布:开发java最好用的软件 编辑:程序博客网 时间:2024/05/18 12:35

s.py

import timeimport SimpleHTTPServerimport SocketServerBYTES_PER_SECOND=160*1024class 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 = 8000Handler = MyHTTPRequestHandlerhttpd = SocketServer.TCPServer(("127.0.0.1", PORT), Handler)print "serving at port", PORThttpd.serve_forever()



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

  

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

 

但是python也由此给人一种误解,只能写功能简单的程序。写不了高大上的程序,其实真的是一种很大的误解。

 

配合上DNS服务器,这个30行的程序可以作为一个不错的升级测试环境。

 

另外,顺便说一句,如果是在linux下面,端口号如果小于1000的话运行程序是要系统权限的,要不然会抛异常。

0 0