zoukankan      html  css  js  c++  java
  • socketserver

    socketserver模块

    格式:

    1 import socketserver
    2 
    3 class Myserver(socketserver.BaseRequestHandler):
    4     def handle(self):
    5         pass
    6     self.request.close()
    7 
    8 server = socketserver.ThreadingTCPServer(("127.0.0.1",5000),Myserver)
    9 server.serve_forever()

    self.request就是socket中的conn

    解释:

     1 服务器启动程序后:
     2 1.执行TCPServer.__init__方法,创建服务端Socket对象并绑定IP和端口
     3     解释:class ThreadingTCPServer(ThreadingMixIn,TCPServer):pass.ThreadingTCPServer先要执行__init__构造函数,ThreadingMinxIn里面没有,就去TCPServer里面去找.
     4 
     5 2.执行BaseServer.__init__方法,将自定义的继承自SocketServer.BaseRequestHandler的类MyRequestHandler赋值给self.RequestHandlerClass
     6     解释:TCPServer构造方法中包含BaseServer.__init__(self,server_address,RequestHandlerClass),所以要把字节定义的类传给BaseServer的构造方法
     7 
     8 3.执行BaseServer.server_forever方法,while循环一直监听是否有客户端请求到达...
     9     解释:servee_forever是BaseServer类中的方法,里面有个while循环,一直调用select.select(),r,w,e = _einter_retry(select.select,[self],[],[],poll_interval)
    10 
    11 
    12 客户端接入:
    13 4.执行BaseServer.__handle__request__nonlock方法
    14     解释:serve_forever的while循环里面有一个判断if self in r:self._handle_request_noblock(),客户端连接句柄发生变化就会把句柄放到r列表里,所以触发了_handle_request_noblock().
    15 
    16 5.执行ThreadingMixIn.process_request方法,创建一个"线程"来处理请求.
    17     解释:调用process_request方法时,从继承类广度优先原则,所以它先调用ThreadingMixIn类中的process_request
    18 
    19 6.执行ThreadingMixIn.process_request_thread方法
    20     解释:t = threading.Thread(target = self.process_request_thread,args = (request,client_address))多线程模块方法,调用self.process_request_thread,此时才真正启动了线程.
    21 
    22 7.执行BaseServer.finish_ruquest方法,执行self.RequestHandlerClass(),即:执行自定义MyRequestHandler的构造方法(自动调用基类BaseRequestHandler的构造方法,在该构造方法中又会调用自定义的MyRequestHandler的handle方法)
    23     解释:连接创建完成,此时开始执行handle方法中的内容,开始和客户端交互,执行完,后面再执行shutdown_request方法关闭连接

    server = socketserver.ThreadingTCPServer(("127.0.0.1",8000),Myserver)执行了三件事:

    1.创建socket对象

    2.绑定IP和端口,self.socket.bind()

    3.设置排队个数,self.socket.listen(5)

  • 相关阅读:
    mysql自增主键
    mysql数据库的备份与恢复
    mysql(mariadb)新建用户及用户授权管理
    vm如何安装xenserver
    安装Centos7时提示 /dev/root does not exits
    python简单实现目录对比
    PM2 实现 自动重启 node 服务 , 例如 服务器重启时,自动启动 之前的服务
    阿里云免费ssl申请配置
    umi-request 配置,出现 某一个接口跨域
    ndm 带空格 做整体
  • 原文地址:https://www.cnblogs.com/s593941/p/9594352.html
Copyright © 2011-2022 走看看