码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-05-10 03:36:34      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:python   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监听的端口。

  

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

 

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

 

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

 

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

史上最简单的带流控功能的http server,布布扣,bubuko.com

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

标签:python   http server   

原文地址:http://blog.csdn.net/i2cbus/article/details/25425107

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!