2020.3.25

发布于 2020-03-25  28 次阅读


Table of Contents

2.python socket.error: [Errno 9] Bad file descriptor的解决办法
套接字被关闭了,所以出现这种错误

并发网络通信模型

常见模型分类

循环服务器模型

更适合UPD

IO并发模型

多进程、线程网络并发模型

python SockerServer

SockerServer介绍
  • socketserver是标准库中的一个高级模块
  • socketserver可以简化创建客户端跟创建服务端的代码

首先导入模块:import socketserver

  • 初始化控制器类Handler【Handler是一个继承BaseRequestHandler的类Handler中的handle方法决定了每一个连接过来的操作】 【控制器类的类名可以是其他的,不一定是Handler,只要继承了BaseRequestHandler就行】
    • init():初始化控制设置,初始化连接套接字,地址,处理实例等信息
    • handle(): 定义了如何处理每一个连接。
    • setup(): 在handle()之前执行.一般用作设置默认之外的连接配置
    • finish():在handle()之后执行。
    • 变量:
      • self.request属性是套接字对象,所以使用self.request.xxxx调用套接字的函数
      • self.server包含调用处理程序的实例
      • self.client_address是客户端地址信息

定义服务端类型【将Handler类和服务端的地址端口参数传入】:

    • TCPServer 支持ipv4的TCP协议的服务器。
      • server=socketserver.TCPServer((HOST,PORT),Handler)【Handler】
    • UDPServer 支持ipv4的UDP协议的服务器。
      • server=socketserver.UDPServer((HOST,PORT),Handler)

运行服务端

    • 持续循环运行:serve_forever(),即使一个连接报错了,但不会导致程序停止,而是会持续运行,与其他客户端通信
      • server.serve_forever()
      • image
    • 停止server_forever:shutdown()
      • server.shutdown()

https://cloud.tencent.com/developer/article/1577969