Why there are only request-response model but how to explain push
今天看帖子浏览到一篇文章讲什么是 web 框架
what-is-a-web-framework其中说到HTTP 协议的基础是 请求-应答 (request-response) 模型
看到这里我突然就萌发了一个疑问。因为这里说到request-response model
那么就是主动的一个请求 应答的过程,从客户端请求-request
到web server-response
的应答。那么这又怎么解释push(推送)
呢?先把挖个坑在这.好吧其实这片文章真正的题目叫做
Python 3 socket programming example
Server端
上面文章中给出了一个最基本的socket的例子但是是2.x版本的。这里提供一个3.x版本的
把下面的代码保存为socket_base.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
import socket
def main(): host = "127.0.0.1" port = 5000 mySocket = socket.socket() mySocket.bind((host,port)) mySocket.listen(1) conn, addr = mySocket.accept() print ("Connection from: " + str(addr)) while True: data = conn.recv(1024).decode() if not data: break print ("from connected user: " + str(data)) data = str(data).upper() print ("sending: " + str(data)) conn.send(data.encode()) conn.close() if __name__ == "__main__": main()
|
在终端A执行python3 socket_base.py
Client端
然后在开一个终端B执行curl http://127.0.0.1:5000
在A中可以看到来自B的请求
1 2 3 4 5 6 7 8 9 10 11 12
| > python3 ./base_socket.py Connection from: ('127.0.0.1', 50285) from connected user: GET / HTTP/1.1 Host: 127.0.0.1:5000 User-Agent: curl/7.54.0 Accept: */*
sending: GET / HTTP/1.1 HOST: 127.0.0.1:5000 USER-AGENT: CURL/7.54.0 ACCEPT: */*
|
分析
可以看出来B通过127.0.0.1的50285端口发送了get request到5000.注: 本地请求所以都是127.0.0.1
得到下面的结果
1 2
| <HTTP Method> <URL> <HTTP version> GET / HTTP/1.1
|
在b中可以看到
1 2 3 4 5
| > curl http://127.0.0.1:5000 GET / HTTP/1.1 HOST: 127.0.0.1:5000 USER-AGENT: CURL/7.54.0 ACCEPT: */*
|
感谢鼓励