700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python实现HTTP服务器(四)单进程线程非阻塞实现多任务

Python实现HTTP服务器(四)单进程线程非阻塞实现多任务

时间:2020-03-24 11:02:23

相关推荐

Python实现HTTP服务器(四)单进程线程非阻塞实现多任务

上篇博客使用了进程、线程、协程实现了多任务的HTTP服务器。本文使用非阻塞单线程进程实现多任务。

1.设置套接字为非阻塞状态

2.建立一个列表用来装交互的套接字

3.遍历列表,如果收到数据则进行交互,如果收到的数据为空,则说明浏览器关闭,关闭套接字,从列表中删除这个套接字

import socketimport timetcp_server_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_server_tcp.bind(("", 7899))tcp_server_tcp.listen(128)tcp_server_tcp.setblocking(False) # 设置套接字为非堵塞的方式client_socket_list = list()while True:# time.sleep(0.5)try:new_socket, new_addr = tcp_server_tcp.accept()except Exception as ret: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(1024)except Exception as ret:print(ret)print("----这个客户端没有发送过来数据----")else:print("-----没有异常-----")print(recv_data)if recv_data:# 对方发送过来数据print("----客户端发送过来了数据-----")else:# 对方调用close 导致了 recv返回client_socket.close()client_socket_list.remove(client_socket)print("---客户端已经关闭----")

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。