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)
  • 相关阅读:
    codevs2606 约数和问题
    UOJ150 运输计划
    codevs1279 Guard 的无聊
    codevs1997 守卫者的挑战
    codevs1291 火车线路
    codevs1217 借教室
    codevs1281 Xn数列
    codevs1218 疫情控制
    codevs1199 开车旅行
    BZOJ1941 [Sdoi2010]Hide and Seek
  • 原文地址:https://www.cnblogs.com/olivertian/p/12609861.html
Copyright © 2011-2022 走看看