zoukankan      html  css  js  c++  java
  • 非阻塞,单线程并发处理多个请求的模型

    import socket
    import time
    
    
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    tcp_socket.bind(("", 9999))
    
    tcp_socket.listen(128)
    
    tcp_socket.setblocking(False)
    
    new_socket_list = list()
    
    while True:
    
        time.sleep(1)  # 用于调试
    
        try:
            new_socket, new_addr = tcp_socket.accept()
        except Exception as e:
            print("没有客户连接")
        else:
            print("新来了客户端连接%s:%s" % new_addr)
            new_socket.setblocking(False)
            new_socket_list.append(new_socket)
    
        for socket in new_socket_list:
            try:
                recv_data = socket.recv(1024)
            except Exception as e:
                print("%s:%s没有发送过来数据" % new_addr)
            else:
                if recv_data:
                    print("接收%s:%s发送来的数据" % new_addr)
                else:  # recv_data为空,说明客户端调用了close,此时该socket全部数据接收完毕,应从列表移除
                    socket.close()
                    new_socket_list.remove(socket)
                    print("%s:%s断开连接" % new_addr)
  • 相关阅读:
    Intern Day7
    Intern Day7
    Intern Day7
    Intern Day6
    Intern Day6
    Intern Day6
    Intern Day6
    Intern Day6
    萧萧远树疏林外,一半秋山带夕阳
    飞线
  • 原文地址:https://www.cnblogs.com/olivertian/p/12609861.html
Copyright © 2011-2022 走看看