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的话执行程序是要系统权限的,要不然会抛异常。
史上最简单的带流控功能的http server,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/yxwkf/p/3855160.html