史上最简单的带流控功能的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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 研究学习之java使用selenium教程[通俗易懂]

    研究学习之java使用selenium教程[通俗易懂]提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码

    2022年6月28日
    38
  • vue-router 报错:Navigation cancelled from“/…“ to “/…“ with a new navigation.

    vue-router 报错:Navigation cancelled from“/…“ to “/…“ with a new navigation.vue-router@3.0版本及以上回调形式已经改成promiseapi的形式了,返回的是一个promise,如果路由地址跳转相同,且没有捕获到错误,控制台始终会出现如图所示的警告(注:3.0以下版本则不会出现以下警告!!!,因路由回调问题…)*怎么解决呢?方案一:安装vue-router3.0以下版本:先卸载3.0以上版本然后再安装旧版本npminstallvue-router@2.8.0-S方案二:针对于路由跳转相同的地址添加catch捕获一下异常:this.$router.

    2022年7月26日
    123
  • 分布式爬虫部署[通俗易懂]

    分布式爬虫部署[通俗易懂]【服务器端】1.下载redis,RedisDesktopManagerredis。2.修改配置文件(找到redis下的redis.windows.conf双击打开,找到bind并修改为0.0.0.0,然后protected-mode“no”3.打开cmd命令行进入redis的安装目录,输入redis-server.exeredis.windows.conf回车,保持程序一直开着。如果不是这个界面,证明redis服务已经开启了,需要redis-clishutdow

    2025年7月17日
    4
  • 有什么软件可以测试U盘性能,最新版本:U盘性能检查测试软件简介

    有什么软件可以测试U盘性能,最新版本:U盘性能检查测试软件简介U 盘性能检查测试软件简介 U 盘扩展和速度检测工具 MyDiskTest 是 U 盘 SD 卡 CF 卡和其他移动存储产品扩展识别工具 它可以轻松检测存储产品是否已扩展容量 并且伪劣 它还可以检测 FLASH 闪存中是否有坏块 是否使用黑芯片 不破坏磁盘的原始数据 并可以测试 U 盘的读写速度 这是选择 U 盘和存储卡的必备工具 设备芯片模型检测工具 U 盘主控检测 ChipGenius 是 USB 设备芯片模型检测工具 可以自

    2025年11月21日
    3
  • 中文停用词_中文停用词哪个

    中文停用词_中文停用词哪个!"#$%&'()*+,…………………………../.一.数.日///0123456789:://::;<=>>&g

    2022年8月2日
    8
  • hibernate Java 时间和日期类型的 Hibernate 映射

    hibernate Java 时间和日期类型的 Hibernate 映射

    2021年11月29日
    50

发表回复

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

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