1      XXXServer

1.1      BaseSever

提供基础的循环等待请求的处理框架。使用serve_forever启动服务,使用shutdown停止。同时提供了一些可自行扩展的方法,用于对不同类型的请求做自己想要的处理。

1.2      TCPServer

在BaseServer基础上增加了一个TCP的socket连接,使用server_bind、server_activate、server_close处理TCP启停等操作

同时增加了get_request、shutdown_request、close_request处理客户端请求。

1.3      UDPServer

继承自TCPServer,将socket改为了SOCK_DGRAM型,并修改了get_request,用于从SOCK_DGRAM中获取request。

同时server_activate、shutdown_request、close_request都改成了空(UDP不需要),比TCP简单一些。

2      XXXMixIn

2.1      ForkingMixIn

提供了process_request方法,每一个请求开启一个新进程来处理

2.2      ThreadingMixIn

提供了process_request方法,每一个请求开启一个新线程来处理

说明:

XXXMixIn专门提供process_request,用来覆盖XXXServer的默认的process_request。(掺合模式:Mixin,可以看做一个设计模式,有点AOP的味道)

使用方法是,同时继承XXXMinIn和XXXServer,例如标准库的:

class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass

一个细节:XXXMixIn一点要写在左侧,XXXServer要写在右侧,这样XXXMinIn里面的process_request方法才会覆盖XXXServer的process_request方法。这个是由python的MRO决定的。

3      XXXRequestHandler

XXXServer在处理request时会调用RequestHandlerClass

self.RequestHandlerClass(request, client_address, self)

因此可以定义各种RequestHandlerClass,来实现对请求的处理。(组合。另一个设计模式?)

3.1      BaseRequestHandler

定义RequestHandlerClass的基本框架,包括三个成员变量:request、client_address、server;然后会依次调用setup()、handle()、finish(),子类可通过覆盖这几个函数实现不同功能。

3.2      StreamRequestHandler

最主要的功能是根据socket生成了读写socket用的两个文件对象(可以理解为句柄)rfile和wfile

3.3      DatagramRequestHandler

同样是生成rfile和wfile,但UDP不直接关联socket。这里的rfile是直接由从UDP中读取的数据生成的,wfile则是新建了一个StringIO,用于写数据。

说明:

在StreamRequestHandler和DatagramRequestHandler中request的含义不同。

StreamRequestHandler中,request是一个TCP连接。每个TCP server在accept一个客户端请求后,都会产生一个新的TCP连接,request就是这个新连接。

DatagramRequestHandler中,request是(data, self.socket),前者是从socket中接收到的数据,后者是socket本身。

Python SocketServer源码分析的更多相关文章

  1. python SocketServer 源码分析

    附上原文链接: http://beginman.cn/python/2015/04/06/python-SocketServer/

  2. python基础-11 socket,IO多路复用,select伪造多线程,select读写分离。socketserver源码分析

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  3. Python之socketserver源码分析

    一.socketserver简介 socketserver是一个创建服务器的框架,封装了许多功能用来处理来自客户端的请求,简化了自己写服务端代码.比如说对于基本的套接字服务器(socket-based ...

  4. eos源码分析和应用(一)调试环境搭建

    转载自 http://www.limerence2017.com/2018/09/02/eos1/#more eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用).下面 ...

  5. python multiprocessing 源码分析

    1. 文档是最先需要了解的,读完文档可能会有很多的意外的收获同时也会留下疑惑,对于一般的使用我觉得读完文档就差不多了,除非一些很有疑惑的地方你可能需要再深入的了解一下.我读文档的目的第一个就是为了找出 ...

  6. python成长之路10——socketserver源码分析

    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 参数一:地址簇 socket.AF_INET ipv4(默认) socket.AF_INE ...

  7. python slots源码分析

    上次总结Python3的字典实现后的某一天,突然开窍Python的__slots__的实现应该也是类似,于是翻了翻CPython的源码,果然如此! 关于在自定义类里面添加__slots__的效果,网上 ...

  8. selenium3 + python - action_chains源码分析

    ActionChains简介 actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互.这对于做更复杂的动作非常有用,比如悬停和 ...

  9. python ironicclient源码分析

    ironicclient是一个cli工具,用来和用户交互的. 首先写一个简单的例子,获取ironic所有的node节点: from ironicclient import client if __na ...

随机推荐

  1. NodeJS的安装

    1. 进入官网下载对应版本的nodejs(我选择的是32位的window7版本x86) 2. 默认路径可修改   3. install就可以安装在cmd中输入path查看路径(我的是E:\compan ...

  2. noi 2985 数字组合

    题目链接: http://noi.openjudge.cn/ch0206/2985/ 2985:数字组合 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有n个正 ...

  3. [Linux] VIM 常用快捷键2

    如何使用MacVim 1.在插入模式之外 基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就像一个“哑巴”编辑器一样.很多新手都会一直呆在插入模式里面,因为这样易于使用.但 ...

  4. sublime 自动编译

    Tools --> Build System --> New: { "shell_cmd": "cc.bat \"$file\"" ...

  5. R----plotly包介绍学习

    plotly包:让ggplot2的静态图片变得可交互 Plotly 是个交互式可视化的第三方库,官网提供了Python,R,Matlab,JavaScript,Excel的接口,因此我们可以很方便地在 ...

  6. 10-JS数组

    数组的定义和创建 数组是值得有序集合.JavaScript数组是无类型的. 数组对象的作用是:使用单独的变量名来存储一系列的值. 数组的创建 有两种向数组赋值的方法(你可以添加任意多的值,就像你可以定 ...

  7. 大分享-hibernate,springmvc,easyui简要介绍

    近期公司一直在做项目,主要用到了springMVC,eseayui,hibernate几大框架.近一个月的时间,个人就目前自我知识给予分享. 很多公司使用mybatis产品,综合所述其最大优点是全SQ ...

  8. SQL Prompt自定义代码片段

    新增代码片段: 代码片段管理: 代码片段中可以使用以下占位符:详见参考: $DATE$ 插入当前日期. $TIME$ 插入当前时间 $USER$ 插入当前电脑的用户名 $PASTE$ 插入剪切板内容 ...

  9. socket(一)

    相关链接: http://my.oschina.net/u/1378445/blog/340206?p=2&temp=1469158886336#blog-comments-list http ...

  10. http知识

    http请求的过程:客户端发起请求,创建端口:http服务器在端口监听客户端请求:http服务器向客户端返回状态和内容. 浏览器搜索自身的DNS缓存-->搜索操作系统自身的DNS缓存(浏览器没有 ...