史上最简单的带流控功能的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的话执行程序是要系统权限的,要不然会抛异常。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118941.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号