Python SocketServer原理解析

先解释下TCP和UDP

共同点

  • 用来传输数据的协议
  • 顶级协议(即不管是通过TCP还是UDP传包,该包都是传到一个IP地址)

各自特点

TCP(Transmission Control Protocol)

  • 原理:

      Client --- send TCP packets ---> Server
      Server--- sends received msg --->Client
      Server--- send TCP packets stream --->Client
      Client --- send received msg --->Server
       
    
  • 数据包接收严格按照发送顺序

  • 如果服务器未收到消息确认包,则重新发送对应包

UDP(User Datagram Protocol)

  • 不确保数据送达
  • 不会重新发包

回到SocketServer

对基于Socket的服务器:

  • address family
    • AF_INET{,6}:IP sockets (default)
    • AF_UNIX:Unix domain sockets
    • others,e.g. AF_DECNET
  • socket type
    • SOCK_STREAM(e.g. TCP)
    • SOCK_DGRAM(e.g. UDP)

对于基于请求的服务器(包含Socket服务器)

  • 请求之前需验证客户端地址

  • 处理多请求:

    • 同步

    • 多进程

    • 多线程

      +————+
      | BaseServer |
      +————+

           |
           v
      

      +———–+ +——————+
      | TCPServer |——->| UnixStreamServer |
      +———–+ +——————+

           |
           v
      

      +———–+ +——————–+
      | UDPServer |——->| UnixDatagramServer |
      +———–+ +——————–+