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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MMC卡的文件系统及其实现方法

    MMC卡的文件系统及其实现方法引言多媒体卡MMC(MultiMediaCard)是由美国SanDisk公司和德国Simens公司于1997年共同开发推出的一种多功能存储卡。内置控制电路,可以使用在手机、数码相机、MP3、PDA等多种数字设备上,可反复记录30万次。现在市场上的主流容量有128MB~2GB。文中首先介绍单片机对SPI协议下的MMC卡的底层读写操作,然后分析MMC卡文件系统的结构,最…

  • 用matlab绘制三维图_家系图绘制的基本规则

    用matlab绘制三维图_家系图绘制的基本规则情形一:函数有显式表达式z=f(x,y)z=f(x,y)z=f(x,y)例1:圆锥面:z=x2+y2z=\sqrt{x^2+y^2}z=x2+y2​clc,clear,closeallx=-5:0.1:5;[X,Y]=meshgrid(x);Z=sqrt(X.^2+Y.^2);mesh(X,Y,Z)例2:旋转抛物面z=2−x2−y2z=2-x^2-y^2z=2−x2−y2clc,clear,closeallx=-5:0.1:5;[X,Y]=meshgrid(x);Z=2-X

    2022年10月11日
  • CAD拉伸的快捷命令_cad拉伸实体快捷键

    CAD拉伸的快捷命令_cad拉伸实体快捷键CAD快捷键在CAD绘图中是不可或缺的,刚入门CAD的小伙伴们一定要熟练掌握常用CAD快捷键命令的使用。那么CAD拉伸快捷键命令是什么呢?又该如何使用呢?下面小编就来给大家介绍一下浩辰CAD软件中CA

  • 背包问题九讲学习小记[通俗易懂]

    背包问题九讲学习小记[通俗易懂]背包综合

  • AWG线径对照表_直流电流线径对照表

    AWG线径对照表_直流电流线径对照表铜线直径通常以awg(美国导线规格)作为单位进行测量,24awg的意思是导线形成最后直径前所要经过的孔的数量为24,awg前的数值越大,导线经过的孔就越多,导线的.1、25AWG=0.455mm。2、详细看AWG线径对照表就行,AWG是美国线规的标准。3、AWG(Americanwiregauge)美国线规,是一种区分导线直径的标准,又被称为.不同线径(1毫米以下的)铜线载流量表s=i/j…

    2022年10月21日
  • cmap用法,很详细(转)

    http://hi.baidu.com/wei83523408/blog/item/878ebd3b8898d5e115cecb2b.html一、Map的基本知识  映射(Map),又称为字典(Dictionary),是由关键字(Key)及其对应的元素值(Value)所组成的元素单元(Element)的表单式集合。通常,对于Map而言,使用给定的Key,可以迅速地从

发表回复

您的电子邮箱地址不会被公开。

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