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监听的端口。
这就是为什么写python程序是一种享受的原因。号称battery include的python,人用人爱的python。
但是python也由此给人一种误解,只能写功能简单的程序。写不了高大上的程序,其实真的是一种很大的误解。
配合上DNS服务器,这个30行的程序可以作为一个不错的升级测试环境。
另外,顺便说一句,如果是在linux下面,端口号如果小于1000的话运行程序是要系统权限的,要不然会抛异常。
史上最简单的带流控功能的http server,布布扣,bubuko.com
原文地址:http://blog.csdn.net/i2cbus/article/details/25425107