06 返回静态文件的映射(函数/多线程)web框架
06 返回静态文件的映射(函数/多线程)web框架
服务器server端python程序(函数版):
import socket
server = socket.socket()
server.bind(("127.0.0.1", 8888))
server.listen() def func_html(conn):
with open("index.html", "rb")as f:
conn.send(f.read()) def func_js(conn):
with open("index.js", "rb")as f:
conn.send(f.read()) def func_css(conn):
with open("index.css", "rb")as f:
conn.send(f.read()) def func_img(conn):
with open("index.png", "rb")as f:
conn.send(f.read()) def func_ico(conn):
with open("favicon.ico","rb")as f:
conn.send(f.read()) def respones_back(conn,path):
conn.send("HTTP/1.1 200 ok \r\n\r\n".encode("utf-8")) if path == "/":
func_html(conn)
elif path == "/index.js":
func_js(conn)
elif path == "/index.css":
func_css(conn)
elif path == "/index.png":
func_img(conn)
elif path == "/favicon.ico":
func_ico(conn)
conn.close() if __name__ == '__main__':
while 1:
conn, client_addr = server.accept()
http_request=conn.recv(1024).decode("utf-8")
path=http_request.split("\r\n")[0].split(" ")[1]
print("path>>>",path) respones_back(conn,path)
服务器server端python程序(函数版)
服务器server端python程序(函数映射版):
import socket from threading import Thread,currentThread,activeCount,enumerate server = socket.socket() server.bind(("127.0.0.1", 8888)) server.listen() def func_html(conn): with open("index.html", "rb")as f: conn.send(f.read()) def func_js(conn): with open("index.js", "rb")as f: conn.send(f.read()) def func_css(conn): with open("index.css", "rb")as f: conn.send(f.read()) def func_img(conn): with open("index.png", "rb")as f: conn.send(f.read()) def func_ico(conn): with open("favicon.ico","rb")as f: conn.send(f.read()) def respones_back(conn,path,func_mappers): conn.send("HTTP/1.1 200 ok \r\n\r\n".encode("utf-8")) for mapper in func_mappers: if path == mapper[0]: mapper[1](conn) break conn.close() # if path == "/": # func_html(conn) # elif path == "/index.js": # func_js(conn) # elif path == "/index.css": # func_css(conn) # elif path == "/index.png": # func_img(conn) # elif path == "/favicon.ico": # func_ico(conn) # conn.close() # 将每个请求的路径对应的执行函数进行映射,循环遍历,减少if判断 func_mappers=[("/",func_html), ("/index.js",func_js), ("/index.css",func_css), ("/index.png",func_img), ("/favicon.ico",func_ico)] if __name__ == '__main__': while 1: conn, client_addr = server.accept() http_request=conn.recv(1024).decode("utf-8") path=http_request.split("\r\n")[0].split(" ")[1] print("path>>>",path) respones_back(conn,path,func_mappers)
服务器server端python程序(函数映射版)
服务器server端python程序(多线程版):
import socket from threading import Thread,currentThread,activeCount,enumerate server = socket.socket() server.bind(("127.0.0.1", 8888)) server.listen() def func_html(conn): print("html>>>",currentThread()) with open("index.html", "rb")as f: conn.send(f.read()) def func_js(conn): print("js>>>", currentThread()) with open("index.js", "rb")as f: conn.send(f.read()) def func_css(conn): print("css>>>", currentThread()) with open("index.css", "rb")as f: conn.send(f.read()) def func_img(conn): print("img>>>", currentThread()) with open("index.png", "rb")as f: conn.send(f.read()) def func_ico(conn): print("icon>>>", currentThread()) with open("favicon.ico","rb")as f: conn.send(f.read()) def respones_back(conn,path): conn.send("HTTP/1.1 200 ok \r\n\r\n".encode("utf-8")) if path == "/": func_html(conn) elif path == "/index.js": func_js(conn) elif path == "/index.css": func_css(conn) elif path == "/index.png": func_img(conn) elif path == "/favicon.ico": func_ico(conn) conn.close() if __name__ == '__main__': while 1: conn, client_addr = server.accept() http_request=conn.recv(1024).decode("utf-8") path=http_request.split("\r\n")[0].split(" ")[1] print("path>>>",path) # respone_back(path) #开线程进行异步处理 task=Thread(target=respones_back,args=(conn,path)) task.start() #查看当前存活的线程和数量 # print("threads>>>",activeCount(),enumerate())
服务器server端python程序(多线程版)
服务器server端python程序(多线程映射版):
import socket from threading import Thread,currentThread,activeCount,enumerate server = socket.socket() server.bind(("127.0.0.1", 8888)) server.listen() def func_html(conn): print("html>>>",currentThread()) with open("index.html", "rb")as f: conn.send(f.read()) def func_js(conn): print("js>>>", currentThread()) with open("index.js", "rb")as f: conn.send(f.read()) def func_css(conn): print("css>>>", currentThread()) with open("index.css", "rb")as f: conn.send(f.read()) def func_img(conn): print("img>>>", currentThread()) with open("index.png", "rb")as f: conn.send(f.read()) def func_ico(conn): print("icon>>>", currentThread()) with open("favicon.ico","rb")as f: conn.send(f.read()) def respones_back(conn,path): conn.send("HTTP/1.1 200 ok \r\n\r\n".encode("utf-8")) for mapper in func_mappers: if path == mapper[0]: mapper[1](conn) break conn.close() # if path == "/": # func_html(conn) # elif path == "/index.js": # func_js(conn) # elif path == "/index.css": # func_css(conn) # elif path == "/index.png": # func_img(conn) # elif path == "/favicon.ico": # func_ico(conn) # conn.close() # 将每个请求的路径对应的执行函数进行映射,循环遍历,减少if判断 func_mappers=[("/",func_html), ("/index.js",func_js), ("/index.css",func_css), ("/index.png",func_img), ("/favicon.ico",func_ico)] if __name__ == '__main__': while 1: conn, client_addr = server.accept() http_request=conn.recv(1024).decode("utf-8") path=http_request.split("\r\n")[0].split(" ")[1] print("path>>>",path) # respone_back(path) #开线程进行异步处理 task=Thread(target=respones_back,args=(conn,path)) task.start() #查看当前存活的线程和数量 # print("threads>>>",activeCount(),enumerate())
服务器server端python程序(多线程映射版)
index.html:
<!DOCTYPEhtml> <htmllang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="index.css"> <link rel="icon" href="favicon.ico"> <title>映射版</title> </head> <body> <div id="d1"> <h1>映射版的页面:本html页面引用了外部本地css样式和js代码(本地图片)</h1> </div> <img src="index.png" alt="本地图片" title="本地图片"> </body> <scriptsrc="index.js"></script> </html>
index.html
06 返回静态文件的映射(函数/多线程)web框架的更多相关文章
- 05 返回静态文件的多线程web框架
05 返回静态文件的多线程web框架 服务器server端python程序(多线程版): import socket from threading import Thread,currentThrea ...
- 04 返回静态文件的函数web框架
04 返回静态文件的函数web框架 服务器server端python程序(函数版): import socket server = socket.socket() server.bind((" ...
- 03 返回静态文件的高级web框架
03 返回静态文件的高级web框架 服务器server端python程序(高级版): import socket server=socket.socket() server.bind(("1 ...
- flask模板应用-加载静态文件:添加Favicon,使用CSS框架,使用宏加载静态资源
加载静态文件 一个Web项目不仅需要HTML模板,还需要许多静态文件,比如CSS.JavaScript文件.图片和声音声.在flask程序中,默认需要将静态文件存储在与主脚本(包含程序实例的脚本)同级 ...
- asp.net core 系列之静态文件
这篇讲解asp.net core中的静态文件(大致翻译于官网). 静态文件,例如HTML,CSS, images和JavaScript. 要想直接被客户端访问,需要做一些配置. 一.Serve sta ...
- BCB常用文件与字符串函数
VCL库函数简介 一.BORLAND C++ BUILDER VCL的内存管理函数 1. AllocMem 在队中分配指定字节的内存块,并将分配的每一个字节初始化为 0.函数原型如下: void * ...
- Discuz!NT静态文件缓存(SQUID)
在目前最新版本的产品中,我们提供了缓存静态文件的解决方案,就是使用SQUID做静态前端,将论坛中的大部分静态文件布署或外链到一个新的HTTP链接上,其中可以外链的静态文件包括: 1.Disc ...
- Express static 托管静态文件 理解
今天偶尔看了一下服务端渲染,遇到了express.static, 在以前学习webpack配置服务端渲染时,也使用express.static 中间件,两者配置不太一样,由于当时也没有认真学,所以 一 ...
- Asp .Net core 2 学习笔记(3) —— 静态文件
这个系列的初衷是便于自己总结与回顾,把笔记本上面的东西转移到这里,态度不由得谨慎许多,下面是我参考的资源: ASP.NET Core 中文文档目录 官方文档 记在这里的东西我会不断的完善丰满,对于文章 ...
随机推荐
- tp5中“前置操作”和“钩子函数”的区别
1.实行顺序: 以下都是标为删除前的操作: 点击删除 -> 前置操作 -> 删除方法(用模型删除) -> 触发钩子函数(删除) -> 删除成功 2.传入的参数: ...
- 2019-2020-1 20199328《Linux内核原理与分析》第十二周作业
缓冲区溢出 2019/12/4 11:33:45 首先是安装一些用于编译的32位C程序e148 $ sudo apt-get update $ sudo apt-get install -y lib3 ...
- Docker基本使用(一)
一.为什么使用容器? 1. 上线流程繁琐开发->测试->申请资源->审批->部署->测试等环节2. 资源利用率低普遍服务器利用率低,造成过多浪费3. 扩容/缩容不及时业务 ...
- 【shell】Shell变量基础及深入
1. 什么是变量 变量就是用一个固定的字符串(也可能是字符数字等的组合),替代更多更复杂的内容,这个内容里可能还会包含变量和路径,字符串等其他内容. 变量的定义是存在内存中. x=1 y=2 2. 变 ...
- java switch用法
为什么80%的码农都做不了架构师?>>> Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进.到目前为止switch支持这样几种数据类型: ...
- WFP之位图效果
首先看一个图片: 在"第一步"这个按钮周围,有一转红色,这个效果就是用WPF的位图效果实现的. 位图效果(BitmapEffect 对象)是简单的像素处理操作.位图效果将 Bi ...
- caffe学习笔记(1)安装 - Ubuntu 15.04
官方安装手册 备注:使用系统 - Ubuntu 15.04 64位操作系统(若系统位于虚拟机上,在安装CUDA后,Ubuntu将无法进入图形界面) /************************* ...
- Win10美吱er吱er,Win10修改默认字体的方法
请参考以下步骤(需要修改注册表,修改前请先备份,以便在出现问题时能够及时恢复): 例:将系统字体改为宋体 1.Windows+r,输入:regedit 2.定位以下路径:HKEY_LOCAL_MACH ...
- 数学--数论--直角三角形--勾股数---奇偶数列法则 a^2+b^2=c^2
先说勾股数: 勾股数,又名毕氏三元数 .勾股数就是可以构成一个直角三角形三边的一组正整数.勾股定理:直角三角形两条直角边a.b的平方和等于斜边c的平方(a²+b²=c²) 勾股数规律: 首先是奇数组口 ...
- C++ 重载运算符 继承 多态 (超详细)
(一)重载运算符: (1)声明与定义格式 一般是类内声明,类外定义,虽然可以在类内定义,但 写前面堆一堆不好看!!! 类内声明: class Demo { 返回值类型 operator 运算符(形参表 ...