首页 > 代码库 > 史上最简单的带流控功能的http server
史上最简单的带流控功能的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的话执行程序是要系统权限的,要不然会抛异常。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。