网络编程 Cookbook
客户端编写
Requests库
方法
request.方法名(post,get,head) args:url kargs:header字典,单条请求头部
.urlopen自动选择请求类型
返回response对象
对象
request,实例req
参数与调用方法参数一致
方法request.urlopen(req)
response
可指定表示方式json(字典),text,content
服务器编写
socketserver库
继承自BaseRequestHandler(单线程)
实现handle方法
属性:
request:客户端套接字
client_adress客户端地址
重用端口
UDP服务器编写
socketserver
属性
request:元组:数据报+客户端socket
基于REST风格的简单接口
对程序实现远程控制或交互
一般的,编写响应HTTP请求的程序
长时间运行程序:REST风格API实现监控,诊断
大数据应用:构建查询、提取数据的系统
控制硬件设备
实现WSGI标准
import cgi
def wsgi_app(environ,start_response)
也可以是类实例(实现__call__方法)可调用类实例
environ字典
key:REQUEST_METHON, PATH_INFO,
调用start_response,发起响应
start_response函数参数
字符串:结果状态
元组序列:HTTP头
返回字节串序列
或生成器(生成字节串)
本节的调度器只负责管理字典path_map
key value
method:path function
请求——提取 方法:路径
方法:路径 分发 处理函数
使用调度器
1.创建实例
2.注册处理函数到调度器
**查询变量:值 放入environ字典
WSGI
与服务器,框架 无关
XML-RPC
简单的远程过程调用服务
创建服务器实例
注册处理函数:register_function()方法
serve_forever方法加载
只能处理特定类型的数据:字符串,数字,列表,字典
会将所有数据序列化为XML格式
在不同的解释器间通信
运行多个解释器实例(可能在多个机器上)
通过消息,在不同解释器间 交换数据
multiprocessing.connection
消息完整无损,
对象通过pickle序列化
需要对连接实现更多的底层控制:超时,非阻塞IO
使用其他库,或socket实现
实现远程过程调用
在socket、multiprocessing.connection这样的消息传递层之上,实现简单的远程过程调用RPC
RPChandler
RPCProxy