• 基于select的IO多路复用并发模型


    服务端:

    from  socket import *
    from select import *
    
    HOST='0.0.0.0'
    PORT=8585
    ADDR=(HOST,PORT)
    
    
    tcp_socket=socket()
    tcp_socket.bind(ADDR)
    tcp_socket.listen(5)
    print(tcp_socket)
    #监听读IO列表
    rlist=[tcp_socket]
    #监听写IO列表
    wlist=[]
    #监听异常IO列表 ps:linux中这个列表不用 因为linux不会主动处理异常
    xlist=[]
    
    
    while True:
        #监听IO
        #rs,ws,xs分别为读、写、异常事件IO的返回列表
        rs, ws, xs = select(rlist,wlist,xlist)
        for r in rs:
            #当rs列表中r与tcp_socket为同一对象时
            if r is tcp_socket:
                connfd,addr=rs[0].accept()
                print('connect from',addr)
                rlist.append(connfd)
            else:
                data=r.recv(1024)
                if not data:
                    print('退出',r)
                    r.close()
                    rlist.remove(r)
                    continue
                else:
                    print(data.decode())
                    wlist.append(r)
        for w in ws:
            w.send(b'ok')

    客户端:

    """
    /etc/python3
    @File     : tcp_conecter.py
    @Time     : 2020/7/17 下午2:43
    @Author   : wangyongqi
    @Email    : 92644827@qq.com
    @SOftware : PyCharm 
    """
    from socket import socket
    
    
    
    sockfd=socket()
    sockfd.connect(('0.0.0.0',9548))
    while True:
        sockfd.send(input(">>").encode())
  • 相关阅读:
    CMU Database Systems
    Calcite分析
    CMU Database Systems
    CMU Advanced DB System
    笔记
    MyBatis Generator中文文档
    Run Test Case on Spark
    Flex报错Error #2048: 安全沙箱冲突
    看看这个超级有用的一种类型——匿名类型
    Java实战_手把手编写记事本
  • 原文地址:https://www.cnblogs.com/yongqi-wang/p/13332585.html
Copyright © 2020-2023  润新知