tcpserver

作者: xncode | 来源:发表于2017-06-15 11:09 被阅读0次

    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

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