05 返回静态文件的多线程web框架

服务器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()) #查看当前存活的线程和数量

客户端浏览器访问:

在浏览器地址栏直接输入地址端口:127.0.0.1:8888

index.html:


<!DOCTYPE html>
<html lang="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>
<script src="index.js"></script>
</html>


05 返回静态文件的多线程web框架的更多相关文章

  1. 04 返回静态文件的函数web框架

    04 返回静态文件的函数web框架 服务器server端python程序(函数版): import socket server = socket.socket() server.bind((" ...

  2. 03 返回静态文件的高级web框架

    03 返回静态文件的高级web框架 服务器server端python程序(高级版): import socket server=socket.socket() server.bind(("1 ...

  3. 06 返回静态文件的映射(函数/多线程)web框架

    06 返回静态文件的映射(函数/多线程)web框架 服务器server端python程序(函数版): import socket server = socket.socket() server.bin ...

  4. web框架的本质

    一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...

  5. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  6. django基础一之web框架的本质

    一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...

  7. day 52 Django基础一之web框架的本质

    Django基础一之web框架的本质   django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...

  8. 01.Django基础一之web框架的本质

    一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...

  9. day 65 Django基础一之web框架的本质

      Django基础一之web框架的本质   django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基 ...

随机推荐

  1. 牛客网练习赛61 A+B

    A.打怪 思路:先判定当小怪的攻击力为0时,你能杀无数只怪,因为小怪A不动你,然后再计算每个小怪最多能给你造成多少伤害(用小怪的血量除以你的攻击力,也就是你砍它几下它会死,你先手,所以小怪肯定比你少砍 ...

  2. var、let、const

    var.let.const之间的区别和使用 1.var声明变量可以重复声明,而let不可以重复声明 let a = 1; let a = 2; var b = 3; var b = 4; a // I ...

  3. 再也不用c刷题了!!——c++刷题必备

    致读者: 博主是一名数据科学与大数据专业大二的学生,真正的一个互联网萌新,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于困惑的读者.由于水平有限,博客中难免会有一些错误 ...

  4. JS省城级联

    2019独角兽企业重金招聘Python工程师标准>>> 这里是HTML内容 <label class="control-label col-md-2 col-sm-3 ...

  5. Nginx访问日志.Nginx日志切割

    11月27日任务 12.10 Nginx访问日志12.11 Nginx日志切割12.12 静态文件不记录日志和过期时间 1.Nginx访问日志 示例一: 日志格式 vim /usr/local/ngi ...

  6. P1465 序言页码 Preface Numbering (手推)

    题目描述 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数值,以下是标准数字表: I 1 V 5 X 10 L 50 C 100 D 500 M 1000 最多3个同样的可以表示为 ...

  7. 曹工谈并发:Synchronized升级为重量级锁后,靠什么 API 来阻塞自己

    背景 因为想知道java中的关键字,对应的操作系统级别的api是啥,本来打算整理几个我知道的出来,但是,尴尬的是,我发现java里最重要的synchronized关键字,我就不知道它对应的api是什么 ...

  8. Python(Redis 中 Set/Zset 类型数据和其他操作)

    1.redis 基本操作命令 Set 操作 Set 集合就是不允许重复的列表 无序集合 sadd(name,values) 给 name 对应的集合中添加 1 个或多个元素 import redis ...

  9. varnish 项目实战

    1.工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp ...

  10. P2432 zxbsmk爱查错

    描述:https://www.luogu.com.cn/problem/P2432 给你一个主串以及若干个子串,求最少需要删除几个字母,使得主串能由一些子串组成. dp [ i ] 表示前 i 个字符 ...