史上最简单的带流控功能的http server
2023-03-20 14:54:13 时间
大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。
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.cn/118941.html原文链接:https://javaforall.cn
相关文章
- Python脚本之批量复制文件并同时支持重命名
- Python脚本之将一个文件夹划分多个文件夹和批量创建文件夹
- Python中os.walk函数说明
- Python 元组详细使用
- Python中Opencv和PIL.Image读取图片的差异对比
- 错误:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。"+文件路径"的解决方案
- windows下PyTorch安装之路记录
- Python 文件编码问题解决
- 机器学习之使用Python完成逻辑回归
- Spark学习之Spark调优与调试(二)
- python爬虫学习之使用XPath解析开奖网站
- python爬虫学习之XPath基本语法
- python爬虫学习之Scrapy框架的工作原理
- python爬虫学习之使用BeautifulSoup库爬取开奖网站信息-模块化
- python爬虫学习之日志记录模块
- python爬虫学习之正则表达式的基本使用
- Python爬虫学习之正则表达式爬取个人博客
- python爬虫学习之爬取全国各省市县级城市邮政编码
- python 字典详细使用
- python爬虫学习之查询IP地址对应的归属地