【6.0】socketserver实现并发

【一】引入

  • socket不能多并发,只能支持一个用户
  • socketserver 模块是 Python 中用于创建网络服务器的模块,提供了一种简单而一致的接口。
    • 它是构建网络服务器的框架,处理了创建、维护和关闭连接的许多底层细节
    • socketserversocket的再封装

【二】socketserver介绍

【1】简介

  • socketserver在python2中为SocketServer

    • 在python3种取消了首字母大写,改名为socketserver。
  • socketserver中包含了两种类,

    • 一种为服务类(server class):前者提供了许多方法
      • 像绑定,监听,运行…… (也就是建立连接的过程) 。
    • 一种为请求处理类(request handle class)
      • 专注于如何处理用户所发送的数据(也就是事务逻辑)。
  • 一般情况下,所有的服务,都是先建立连接,也就是建立一个服务类的实例,然后开始处理用户请求,也就是建立一个请求处理类的实例。

【2】socketserver 模块中的类

  • BaseServer:实现服务器的基本类。

  • TCPServer:处理 TCP 连接的服务器。

  • UDPServer:处理 UDP 连接的服务器。

  • UnixStreamServer:类似于TCPServer提供面向数据流的套接字连接,但是旨在UNIX平台上可用。

  • UnixDatagramServer:类似于UDPServer提供面向数据报的套接字连接,但是旨在UNIX平台上可用。

  • ForkingMixIn:实现了核心的进程化功能,用于与服务器类进行混合,提供异步特性。

  • ThreadingMixIn:实现了核心的线程化功能,用于与服务器类进行混合,异步特性。

  • ForkingTCPServer:每个请求创建一个新进程的 TCP 服务器。ForkingMixIn和TCPServer`组合。

  • ForkingUDPServer:每个请求创建一个新进程的 UDP 服务器。ForkingMixIn和UDPServer组合。

  • ThreadingTCPServer:在单独的线程中处理每个请求的 TCP 服务器。ThreadingMixIn和TCPServer组合。

  • ThreadingUDPServer:在单独的线程中处理每个请求的 UDP 服务器。ThreadingMixIn和UDPServer组合。

  • BaseRequestHandler:用于定制Handler类型,自定义的Handler类型只要继承自BaseRequestHandler,并覆盖写入它的handle() 方法即可。

  • StreamRequestHandler:TCP请求处理类的一个实现。

  • DataStreamRequestHandler:UDP请求处理类的一个实现。

【3】server类继承关系

在这里插入图片描述

【4】请求处理类继承关系

在这里插入图片描述

【三】socket 模块与 socketserver 关系

  • socket 和 socketserver 是两个不同的 Python 模块,都用于网络编程。

  • socket 模块提供了通用的套接字编程接口,可用于创建客户端和服务器端程序。

    • 它涵盖了与网络通信相关的底层细节
    • 如创建套接字、绑定地址、监听请求、接受连接、发送数据和接收数据。
  • socketserver 模块是 socket 模块的一个封装

    • 它抽象了服务器端网络编程的复杂度,使您能够快速编写服务器端程序。
    • 它提供了多种服务器类型
    • 如多线程服务器、多进程服务器和单进程服务器,以满足不同的网络编程需求。
    • 此外,它还提供了简单的面向对象编程模型,允许您扩展基础类并定制服务器行为。
  • 小结

    • 如果您需要快速编写简单的服务器端程序,那么 socketserver 模块可能是您的最佳选择
    • 如果您需要更多的灵活性和细节控制,则可以使用 socket 模块。

【四】socketserver使用

  • 继承关系图中有五个类,其中四个类表示四种类型的同步服务器:
+------------+
| BaseServer |
+------------+
      |
      v
+-----------+        +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+        +------------------+
      |
      v
+-----------+        +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+        +--------------------+

【1】创建 TCPServer

(1)语法规则

  • TCPServer 类是 Python3 中基于 TCP 协议的多线程服务器类
import socketserver

# 这将使用InternetTCP协议,该协议提供客户机和服务器之间的连续数据流。
# 如果 bind_and_activate 为true,构造函数自动尝试调用 server_bind() 和 server_activate() . 
# 其他参数将传递给 BaseServer 基类。
servser = socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True)

# socketserver.UnixStreamServer:仅限于Unix系统的,Unix套接字流
servser = socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True)
  • 使用 UDPServer 类时,可以指定下列三个参数

    • server_address:服务器的地址,他应该是一个元组包含地址和端口如:(“localhost”, 9000)。

    • RequestHandlerClass:我们自定义的类,类中必须重写handle()方法。用于处理所有socket请求。

    • bind_and_activate:如果为True,将自动调用server_bind()和server_activate()。一般默认即可。

(2)示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值