Why there are only request-response model but how to explain push

今天看帖子浏览到一篇文章讲什么是 web 框架what-is-a-web-framework其中说到HTTP 协议的基础是 请求-应答 (request-response) 模型看到这里我突然就萌发了一个疑问。因为这里说到request-response model那么就是主动的一个请求 应答的过程,从客户端请求-requestweb 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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Date : 2018-07-15 00:56:20
# @Author : Simon (simon.xie@codewalker.meg)
# @Link : http://www.codewalker.me
# @Version : 1.0.0

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: */*