本篇文章我们主要介绍WSGI协议 , 该协议用来描述Server与Framework之间的通信接口 , 我们日常使用的Python WEB框架Django、Flask、web.py等都遵循了该协议 。下面我们就来详细了解一下该协议的实现吧!
01 简介WSGI协议全称Web Server Gateway Interface(Web服务器网关接口) 。这是Python中定义的一个网关协议 , 规定了Web Server如何跟应用程序交互 。该协议的主要目的就是在Python中所有Web Server程序或者网关程序 , 能够通过统一的协议跟Web框架或者Web应用进行交互 。如果没有这个协议 , 那每个程序都要各自实现各自的交互接口 , 而不能够互相兼容 , 重复造轮子 。使用统一的协议 , Web应用框架只要实现WSGI协议规范就可以与外部进行交互 , 不用针对某个Web Server独立开发交互逻辑 。
02 Web Server实现在了解WSGI协议之前 , 我们先通过socket实现一个Web服务器 。通过监听本地端口来接客户端的web请求 , 然后进行响应 , 具体如下:
1. #!/usr/bin/env/ python 2. # -*- coding:utf-8 -*- 3. 4. import socket 5. 6. END_TAG_F = b'nn' 7. END_TAG_S = b'nrn' 8. 9. # 设置web server响应内容 10. html_content = '<html><h1>My Frist Web Page<h1></html>' 11. 12. # 设置响应headers 13. resp_args = ['HTTP/1.0 200 OK', 'Date: Sun, 22 nov 2020 19:00:00 GMT', 14. 'Content-Type: text/html;charset=utf-8', 15. 'Content-Length: {}rn'.format(len(html_content)), html_content] 16. 17. _resp = "rn".join(resp_args) 18. 19. 20. def connet_operate(conn, addr): 21. """ 22. 请求操作 23. :param conn: 24. :param addr: 25. :return: 26. """ 27. request = b'' 28. while END_TAG_F not in request and END_TAG_S not in request: 29. request += conn.recv(1024) 30. 31. print("请求内容: ", request) 32. conn.send(_resp.encode()) 33. conn.close() 34. 35. 36. def web_server(): 37. # socket.AF_INET用于服务器与服务器之间同行 38. # socket.SOCK_STREAM用于基于TCP流的通信 39. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 40. 41. # 监听本地8888端口 42. server.bind(('127.0.0.1', 8888)) 43. server.listen() 44. print("web server已经启动") 45. 46. try: 47. while True: 48. conn, address = server.accept() 49. connet_operate(conn, address) 50. except: 51. server.close() 52. 53. 54. if __name__ == "__main__": 55. web_server()
下面我们启动server服务器 , 查看页面能不能正常访问 , 同时看看
文章插图
文章插图
上面代码就是最基本的web服务模型了 , 通过socket与HTTP协议提供Web服务 , 但上面的web服务是单线程的 , 只有前一个请求处理结束才处理第二个请求 , 我们该造一下上面的代码 , 通过python threading模块实现多线程的web服务器 , 具体操作如下:
推荐阅读
- Web端非常有用的一个文件上传插件——FilePond
- 想了解蓝牙音源解码必看文章 | SBC、AAC、aptX、LDAC 秒懂
- web交换机管理怎么管理?两种方法,轻松掌握
- webpack教程:如何从头开始设置 webpack 5
- 一文看懂USB和雷电接口规范的发展史
- 一文看懂微服务架构之注册中心Consul、Nacos
- 快速优化 Web 性能的10 个手段
- 10个对web开发人员有用的HTML文件上传技巧
- web应用防火墙是做什么的?与传统网络设备的区别
- Websocket技术选型参考