from gevent import monkey
import gevent
import socket
import sys
import remonkey.patch_all()class WSGIServer(object):"""定义一个WSGI服务器的类"""def __init__(self, port, documents_root):# 1. 创建套接字self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2. 绑定本地信息self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)self.server_socket.bind(("", port))# 3. 变为监听套接字self.server_socket.listen(128)self.documents_root = documents_rootdef run_forever(self):"""运行服务器"""# 等待对方链接while True:new_socket, new_addr = self.server_socket.accept()gevent.spawn(self.deal_with_request, new_socket)  # 创建一个协程准备运行它def deal_with_request(self, client_socket):"""为这个浏览器服务器"""while True:# 接收数据request = client_socket.recv(1024).decode('utf-8')# print(gevent.getcurrent())# print(request)# 当浏览器接收完数据后,会自动调用close进行关闭,因此当其关闭时,web也要关闭这个套接字if not request:new_socket.close()breakrequest_lines = request.splitlines()for i, line in enumerate(request_lines):print(i, line)# 提取请求的文件(index.html)# GET /a/b/c/d/e/index.html HTTP/1.1ret = re.match(r"([^/]*)([^ ]+)", request_lines[0])if ret:print("正则提取数据:", ret.group(1))print("正则提取数据:", ret.group(2))file_name = ret.group(2)if file_name == "/":file_name = "/index.html"file_path_name = self.documents_root + file_nametry:f = open(file_path_name, "rb")except:# 如果不能打开这个文件,那么意味着没有这个资源,没有资源 那么也得需要告诉浏览器 一些数据才行# 404response_body = "没有你需要的文件......".encode("utf-8")response_headers = "HTTP/1.1 404 not found\r\n"response_headers += "Content-Type:text/html;charset=utf-8\r\n"response_headers += "Content-Length:%d\r\n" % len(response_body)response_headers += "\r\n"send_data = response_headers.encode("utf-8") + response_bodyclient_socket.send(send_data)else:content = f.read()f.close()# 响应的body信息response_body = content# 响应头信息response_headers = "HTTP/1.1 200 OK\r\n"response_headers += "Content-Type:text/html;charset=utf-8\r\n"response_headers += "Content-Length:%d\r\n" % len(response_body)response_headers += "\r\n"send_data = response_headers.encode("utf-8") + response_bodyclient_socket.send(send_data)# 设置服务器服务静态资源时的路径
DOCUMENTS_ROOT = "./html"def main():"""控制web服务器整体"""# python3 xxxx.py 7890if len(sys.argv) == 2:port = sys.argv[1]if port.isdigit():port = int(port)else:print("运行方式如: python3 xxx.py 7890")returnprint("http服务器使用的port:%s" % port)http_server = WSGIServer(port, DOCUMENTS_ROOT")http_server.run_forever()if __name__ == "__main__":main()

转载于:https://www.cnblogs.com/jyue/p/10468714.html

Web静态服务器-7-gevent版相关推荐

  1. Python简易web静态服务器程序搭建

    Python简易web静态服务器程序搭建 Python自带简易静态web服务器搭建 http.server模块 DIY简易静态web服务器程序搭建 普通版 步骤 具体代码 面向对象版 代码 命令行版 ...

  2. pythonweb静态服务器_Python面向对象之Web静态服务器

    本文实例为大家分享了Python Web静态服务器的具体代码,供大家参考,具体内容如下 功能:用户访问服务器可以返回指定页面 步骤: 1.创建服务器类 2.创建初始化服务器配置方法 3.创建接收客户端 ...

  3. Python高级——Web静态服务器(面向对象)

    功能:用户访问服务器可以返回指定页面 步骤: 1.创建服务器类 2.创建初始化服务器配置方法 3.创建接收客户端请求的方法 4.创建发送响应报文给客户端方法 import socket import ...

  4. web 静态页面和动态页面的区别

    文章目录 一.静态web页面: 二.动态web页面: 为什么需要web服务器?(web server) 三.关于两者区别的简单直接的描述 四.实验测试 一.静态web页面: 1.在静态Web程序中,客 ...

  5. 通过Java编写一个服务器理解动态Web,静态Web

    静态Web 说到Servlet自然就要说到Web,Web分为静态Web和动态Web,之前我一直都傻傻分不清两者的区别,直到用JAVA编写了一个服务器后才明白二者的区别,所谓静态Web,实际上就是指,客 ...

  6. 单进程gevent版-TCP服务器(python 版)

    gevent版-TCP服务器 import sys import time import geventfrom gevent import socket,monkey monkey.patch_all ...

  7. gevent版TCP服务器

    gevent版-TCP服务器 import sys import time import geventfrom gevent import socket,monkey # 猴子补丁,在执行时动态替换 ...

  8. WEB 3.0(非技术版)

    原文地址:https://ethfans.org/wikis/WEB-3.0%EF%BC%88%E9%9D%9E%E6%8A%80%E6%9C%AF%E7%89%88%EF%BC%89 WEB 3.0 ...

  9. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

    读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...

  10. Web 前端攻防(2014版)-baidu ux前端研发部

    http://fex.baidu.com/articles/page2/ Web 前端攻防(2014版) zjcqoo | 20 Jun 2014 禁止一切外链资源 外链会产生站外请求,因此可以被利用 ...

最新文章

  1. 多级反馈队列列算法的定义
  2. 4 关卡流 进阶_儿童桌游要不要鸡血的过关?关卡制儿童桌游介绍与方法论
  3. shell 字符串分割
  4. 制作U盘启动盘之Ubuntu
  5. 【C#】多线程解决UI界面卡死的问题
  6. Android框架Volley使用:Post请求实现
  7. linux系统安装自主分区,Linux系统的安装(自动引导安装、网络安装、分区选择)...
  8. nodejs连接远程MySQL数据库_nodejs remote链接mysql数据库总结
  9. 文字绘制——pygame之旅
  10. fd抓包数据类型_fd抓包教程 FD入门简介(配置教程) fd视频教程2016
  11. 文件的输入法程序的字符编码
  12. 特色十足,FIIL 随身星体验
  13. 三维场景注记的配置相关(学习记录)
  14. 数据库分库分表,分片配置轻松入门!
  15. 2021-2027全球与中国医疗物联网服务市场现状及未来发展趋势
  16. 链路层协议——SLIP协议和PPP协议
  17. 华为回鸿蒙,信口开河!华为直播回应鸿蒙的安卓套壳传闻!
  18. html5 ins标签,HTML ins标签常用的用法有哪些?HTML ins常用属性的介绍
  19. 机器人总动员片尾曲歌词_机器人总动员中的所有歌曲叫什么名?
  20. Html上传文件php处理上传文件

热门文章

  1. 《Cocos2d-JS开发之旅》重印在即,感谢大家的支持
  2. Guava - Collections - Immutable collections
  3. 转iPhone开发的门槛
  4. Java poi操作导入导出excel
  5. C# winform小票打印
  6. 前端图表生成利器--ECharts推荐
  7. 27. 二叉搜索树与双向链表(C++版本)
  8. java shell文件_JAVA执行bat文件和shell脚本文件
  9. 编程简单的计算机,计算机简单编程示例
  10. 求两个集合是否有交集 c语言_高中数学:集合与函数概念知识点汇总