美文网首页
python SimpleHTTPServer简单分析

python SimpleHTTPServer简单分析

作者: 笑靥千年 | 来源:发表于2020-05-13 20:02 被阅读0次

python 自带的SimpleHTTPServer 模块可迅速搭建一个httpserver。

进入某个目录里

python -m SimpleHTTPServer  #python2
python -m http.server       #python3

源码结构:

模块结构

SimpleHTTPServer.py  #get head 以及文件目录的实现
BaseHTTPServer.py    #http的实现
SocketServer.py      #socket的实现

SimpleHTTPServer

#伪码
class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(self): #HTTP get的实现
        f = self.send_head()
        if f:
            self.copyfile(f, self.wfile) #显示文件(文件列表也是写到临时文件返回)

    def do_HEAD(self): #HTTP head的实现
        f = self.send_head()
        if f:
            f.close()
            
    def send_head(self):
        if {path is dir}:
            return 文件列表页
        else:
            return 文件

BaseHTTPServer

class HTTPServer(SocketServer.ForkingTCPServer):
    def server_bind(self): #复写用于保存server name 和port
        ...
        host, port = self.socket.getsockname()[:2]
        self.server_name = socket.getfqdn(host)
        self.server_port = port
        
class BaseHTTPRequestHandler(SocketServer.StreamRequestHandler):
    def handle(self):#解析到command, path, version
        self.handle_one_request()
        
    def send_error(self, code, message=None):#返回错误
        self.send_header
        self.wfile.write(content)
        
    def send_response(self, code, message=None):#返回数据
        return content

SocketServer

          +------------+
          | BaseServer |
          +------------+
                |
                v
          +-----------+        +------------------+
          | TCPServer |------->| UnixStreamServer |
          +-----------+        +------------------+
                |
                v
          +-----------+        +--------------------+
          | UDPServer |------->| UnixDatagramServer |
          +-----------+        +--------------------+

常见的server 模式

    - synchronous (one request is handled at a time)
    - forking (each request is handled by a new process)
    - threading (each request is handled by a new thread)

select、poll、epoll区别

区别项 select poll epoll
单个进程最大连接数 2048 无限制 无限制
FD剧增后的效率 线性性能下降 线性性能下降 无线性性能下降
消息传递 内核拷贝 内核拷贝 共享内存

SimpleHTTPServer 用的是select,也可以改成另外两种体验一下

相关文章

网友评论

      本文标题:python SimpleHTTPServer简单分析

      本文链接:https://www.haomeiwen.com/subject/wvvonhtx.html