WSGI
WSGI ,全称是 Web Server Gateway Interface(Web服务器网关接口)
- 是 Python 中定义的一个网关协议,规定了 Web Server 如何跟应用程序交互 。
在 Python 中所有 Web Server 程序,能够通过 统一的协议(WSGI协议) 跟 Web 框架或者说 Web 应用进行交互 。
WSGI的底层:通过socket编程实现 Web 服务
Web服务最基本的模型 , 通过 socket 和 HTTP 协议提供 Web 服务。
监听本地 8000 端口 ,接收客户端发过来的数据 ,然后返回对应的 HTTP 响应。
import socket
EOL1 = b'\n\n'
EOL2 = b'\n\r\n'
body = 'hello world! 世界这么大,我们一起闯!'
response_params = [
'HTTP/1.0 200 OK',
'Date: Sun , 27 may 2018 01 : 01 : 01 GMT',
'Content-type: text/html; charset=utf-8',
'Content-Length: {}\r\n'.format(len(body.encode())),
body,
]
response = '\ r\n'.join(response_params)
def handle_connection(conn, address):
request = b''
while EOL1 not in request and EOL2 not in request:
request += conn.recv(1024)
print(request)
conn.send(response.encode()) # response转为bytes后传输
conn.close()
def main():
"""
socket.AF_INET: 服务器与服务器间的网络通信
socket.SOCK_STREAM: TCP的流式socket套接字
"""
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 设置端口可复用
ss.bind(('127.0.0.1', 8000))
ss.listen(5) # 设置 backlog-socket 连接最大排队数量
print('127.0.0.1:8000')
try:
while True:
conn, address = ss.accept()
handle_connection(conn, address)
finally:
ss.close()
if __name__ == '__main__':
main()