zoukankan      html  css  js  c++  java
  • Python随心记--阻塞IO server

    阻塞IO server
    import socket
    
    sk = socket.socket()
    
    sk.bind(('127.0.0.1',8080))
    
    
    while 1:
        conn,addr = sk.accept()
        while 1:
            conn.send('hello client'.encode('utf8'))
            data = conn.recv(1024)
            print(data.decode('utf8'))
    
    #client
    import socket
    
    sk = socket.socket()
    
    sk.bind(('127.0.0.1',8080))
    
    while 1:
        data = sk.recv(1024)
        print(data.decode('utf8'))
        sk.send(b'hello server')
    非阻塞IO server
    import time,socket
    
    sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sk.bind(('127.0.0.1',6667))
    sk.listen(5)
    sk.setblocking(False)
    while True:
        try:
            print('waiting client connection........')
            connection,addr = sk.accept()
            print('+++',addr)
            client_message = connection.recv(1024)
            print(str(client_message,'utf8'))
            connection.close()
        except Exception as e:
            print(e)
    #client
    import time,socket
    sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    while True:
        sk.connect(('127.0.0.1',6667))
        print('hello')
        sk.sendall(bytes('hello','utf8'))
        time.sleep(2)
        break
    IO多路复用select监听 sewrver
    #优势:可以监听多个连接
    import socket,select
    sk = socket.socket()
    sk.bind(('127.0.0.1',9904))
    sk.listen(5)
    inp = [sk,] 
    while True:
        r,w,e = select.select(inp,[],[],5)
        for i in r:
            conn,addr = i.accept()
            print('hello')
            inp.append(conn)
        print('>>>>>>')
    
    #client
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',9904))
    
    while 1:
        inp = input('>>>:').strip()
        sk.send(inp.encode('utf8'))
        data = sk.recv(1024)
        print(data.decode('utf8'))
    select触发方式
    #水平触发
    #边缘触发

    异步IO :全程无阻塞

    selectors模块介绍
    import selectors,socket
    sel = selectors.DefaultSelector()
    def accept(sock,mask):
        conn,addr = sock.accept()
        print('accept',conn,'from',addr)
        conn.setblocking(False)
        sel.register(conn,selectors.EVENT_READ,read)
    
    def read(conn,mask):
        data = conn.recv(1000)
        if data:
            print('echoing',repr(data),'to',conn)
            conn.send(data)
        else:
            print('closing',conn)
            sel.unregister(conn)
            conn.close()
    
    sock = socket.socket()
    sock.bind(('localhost',8090))
    sock.listen(100)
    sock.setblocking(False)   #设置非阻塞
    sel.register(sock,selectors.EVENT_READ,accept)
    
    while True:
        events = sel.select()
        for key,mask in events:
            callable = key.data
            callable(key.fileobj,mask)
    
    #client
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',8090))
    
    while 1:
        inp = input('>>>:').strip()
        sk.send(inp.encode('utf8'))
        data = sk.recv(1024)
        print(data.decode('utf8'))
  • 相关阅读:
    解决Maven下载速度缓慢问题
    IntelliJ IDEA 最新激活码
    Googel 浏览器 模拟发送请求工具--Advanced REST Client
    Firefox火狐 浏览器接口调试工具 JSON 格式化
    修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题
    解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid
    configure: error: You need a C++ compiler for C++ support.[系统缺少c++环境]
    解决编译apache出现的问题:configure: error: APR not found . Please read the documentation
    centos6 Linux安装redis 2.6.14
    Nginx+Tomcat负载均衡配置
  • 原文地址:https://www.cnblogs.com/Essaycode/p/10325260.html
Copyright © 2011-2022 走看看