使用非堵塞方式实现http服务器多任务

使用非堵塞原理实现多任务,并发处理

import socket
import time

tcp_sever_tcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_sever_tcp.bind(("",7890))
tcp_sever_tcp.listen(128)
tcp_sever_tcp.setblocking(False)

client_socket_list = list()

def main():
    while True: 
        time.sleep(0.5) # 等待验证观察打印输出
        try:
            new_socket,new_addr = tcp_sever_tcp.accept()
        except:
            print("---没有客户端到来---")
        else:
            print("---只要没有发生异常,意味着新客户端到来---")
            new_socket.setblocking(False) # 设置套接字为非堵塞方式
            client_socket_list.append(new_socket)

        for client_socket in client_socket_list:
            try:
                recv_data = client_socket.recv(128)
            except Exception as ret:
                print("---客户端没有发送数据过来---")
            else:
                if recv_data:
                    # 对方发送数据过来了
                    print("---客户端发送数据过来了---")
                    print(recv_data.decode("utf-8"))
                else:
                    client_socket.close()
                    client_socket.remove(new_socket)
                    print("---客户端已经关闭---")

if __name__=="__main__":
    main()

 

你可能感兴趣的:(使用非堵塞方式实现http服务器多任务)