zoukankan      html  css  js  c++  java
  • 小结9.10

    1. socketserver源码分析

    import socketserver
    
    class Mytcp(socketserver.BaseRequestHandler):
        def handle(self):
            # self.server  ThreadingTCPServer的对象:
            # self.request   conn
            # self.client_address  addr
            pass
    
    if __name__ == '__main__':
        server = socketserver.ThreadingTCPServer(('127.0.0.1',8000),Mytcp)
        # server = socketserver.ThreadingUDPServer(('127.0.0.1',8000),Mytcp)
        '''
        1 ThreadingTCPServer实例化:走__init__方法
            ThreadingTCPServer(ThreadingMixln,TCPServer)的__init__方法,没有,走的父类:TCPServer(BaseServer)的__init__
            TCPServer(BaseServer)的__init__又调用了父类的__init__
                赋值操作:self.server_address = server_adress
                        self.RequestHandlerClass = RequestHandlerClass
                数据放到水当中了?放到了server这个对象中
            socket.bind()
            socket.listen()
        2 server.serve_forever()
            一堆代码不需要管:self._handle_request_noblock
                request,client_address = self.get_request()
                    self.get_request()在Tcpserver这个类:self.socket.accept()
                self.process_request(request,client_adress):ThreadingMixln类的process_request
                    开启线程执行ThreadingMixln类的process_request_thread,执行了finish_request(request,client_address,self)在BaseServer类中
                         request:就是连接对象,conn
                         client_address:客户端ip和端口
                         self:server对象,实例化得到的server对象
                         实例化RequestHandlerClass得到一个对象:会走__init__方法
                         RequestHandlerClass没有,走的BaseRequestHandler类的__init__
                         会执行handle方法,通信逻辑
                         
        '''
        server.serve_forever()
    

    2. 面向对象串讲

    '''
    类与对象
        __init__
    
    '''
    
    class Person:
        school = 'xxx'
        def __init__(self):  # 对象初始化方法,对象的绑定方法,对象来调用会把对象传过来
            self.name = 'xxx'
    
    p = Person()  # 类实例化产生对象会调用__init__
    print(p.school)
    Person.school = 'uuu'
    p.school = 'yy'
    print(p.school)
    
    '''
    属性查找:包括数据属性,包括方法
        数据属性:对象中找---》类中---》父类(mro列表)---》obj   py2中没有mro这个东西
        方法查找:对象的绑定方法---》父类中按照mro列表查找---》obj
    '''
    
    '''
    绑定方法:
        定义在类内部,没有被任何装饰器装饰的函数,就是方法
        给对象来用 对象.方法() 默认把对象自身传过去  ***特殊之处
        类来调用就是普通函数,有几个值就传几个值
    '''
    
    '''
    对象之间的交互
        把一个对象传到另一个对象中,操作这个对象
        人狗大战
    '''
    
    '''
    三大特性:继承 封装 多态
        继承:
            在类名后的括号中写要继承的类,用逗号分隔
            py中支持多继承(属性查找顺序)
            新式类和经典类
                继承了object的类都叫新式类(py3中都是新式类)
                py2中才有新式类,经典类之说
            菱形问题的查找:
                广度优先:新式类
                深度优先:经典类
            mro列表
            super() 特殊对象,调用父类的方法和属性(严格按照mro列表找的)
            self和super的区别:self一定是从根本上找,super()从当前位置按照mro列表找
            类名.方法()  就是个普通函数,这个就不按照mro列表找了,指名道姓的来用
            派生:子类多出来的属性,方法
        多态和多态性:
            一个事物多种形态
            多态性:执行同一个事物的同一个方法,表现出来的结果是不一样的
            两种限制子类必须实现什么方法的方式
                abc模块
                raise抛异常
            鸭子类型:走路像鸭子,你就是鸭子
            len()  调用对象.__len__()
        封装:
            把属性和方法隐藏
                以__开头,就会隐藏
                并没有实际隐藏(做了变形)
                隐藏属性:保证数据安全
                隐藏方法:隔离复杂度
                property 装饰器 包装成数据属性
        其他两个装饰器:
            classmethod:类的绑定方法:可以类来调用会自动把类传入(对象也可以调用)
            staticmethod:静态方法,谁都可以调用,不会自动传参数
        元类:
            __call__
            __new__
            __getattr__
            __setattr__
            __delattr__
            type和object
        反射:(通过字符串去获取,删除,修改 对象的属性或方法)
            hasattr
            getattr
            setattr
            delattr
        isinstance和issubclass
        
    '''
    

    3. 网络编程

    '''
    网络是什么:链接介质 + 协议
    协议:osi7层
    5层协议:
        物理层:电信号
        数据链路层:做分组:数据报/数据帧   mac
        网络层:ip 通过ip得到mac地址---arp协议   mac地址学习
        传输层:tcp/udp  三次握手四次挥手,可靠传输
        应用层:写的程序都是应用层,基于socket(基于网络和传输抽象出来的)
    
    socket编写tcp的客户端和服务端:
        传输文件:自己定制了协议
        粘包问题中级解决方案
            struct模块先把头的长度包成4个字节,发送4个字节
            发送头
            发送内容
            接收端:
                接收4个字节,解除头部长度
                接收头部,取出数据长度
                接收数据长度
    
    socket编写udp的客户端和服务端
        不需要建立连接,传输不可靠,数据报协议(自己有头)
    
    socketserver写支持并发的服务端
    '''
    
    # with 上下文管理器
    with open('a.avi','rb') as f:
        for line in f:
            print(line)
    
    class Open():
        def __enter__(self):
            print('xxxx')
            pass
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('yyyy')
            pass
    
    with Open() as f:
        # 代码
        f.name = 'xxxx'
    
  • 相关阅读:
    navigateTo防止多次跳转
    vue中的绑定class和微信小程序中的绑定class的区别
    js同步和异步
    本地存储和vuex使用对比
    微信小程序页面跳转区别总结
    CAS-技术专区-认证服务器cas-server搭建
    CAS-技术专区-SSO配置完整案例(静态认证+数据库认证)
    SpringCloud-技术专区-实战案例-Zuul整合OAuth2.0认证服务
    OAuth2.0协议专区-SpringCloud安全-集成OAuth2实现身份认证和单点登录
    OAuth2.0协议专区-SpringCloud微服务实战-基于OAUTH2.0统一认证授权的微服务基础架构
  • 原文地址:https://www.cnblogs.com/yushan1/p/11498730.html
Copyright © 2011-2022 走看看