tcpserver

BaseServer

类变量:timeout
实例变量:address RequestHandlerClass event close_flag

启动服务器

    # 启动服务器的两种选择
    # 1、一次调用一次handle_request
    # 2、直接调用serve_forver

启动服务器前先清除event,循环判断close_flag为假时,不断调用select(默认poll_interval:0.5s,且会捕捉系统抛出的EINTR异常并忽略掉),在自身可读时调用非阻塞处理函数。

非阻塞处理函数

get_request 未实现

verify_request 默认True

process_request

调用 finish_request 并在其中调用 RequestHandlerClass(request, client_address, self)
调用shutdown_request 并在其中调用close_request
在整个处理中捕获异常并调用handle_error shutdown_request

TCPServer(BaseServer)

类变量:address_family socket_type request_queue_size(5) allow_reuse_address(False)
实例变量:address RequestHandlerClass socket bind_and_activate(若设置会在构造时进行bind和listen)

get_request

即为socket的accept,接收一个连接

shutdown_request

即为socket的shutdown,且最终调用close

close_request

即为socket的close

UDPServer(TCPServer)

类变量:allow_reuse_address socket_type max_packet_size

get_request

即为socket的recvfrom

MixIn

ForkingMixIn:

类变量:timeout active_children(set) max_children

process_request

先收集已退出的子进程
调用fork
父进程中加入pid到active_children并close
子进程中调用finish_request shutdown_request,且在调用过程中捕获异常

ThreadingMixIn:

类变量:daemon_threads = False

process_request

创建一个线程并设置是否为daemon_threads,之后启动。
接收变量为request client_address,正常处理流程。

Handler

BaseRequestHandler

handler中流程:init setup handle finish
获得的参数:request client_address server
用户需要派生各类handler并提供handle方法即可

StreamRequestHandler(BaseRequestHandler)

DatagramRequestHandler(BaseRequestHandler)

你可能感兴趣的:(tcpserver)