gevent的原理
"""
2020.07.13
1.目的:用web服务器为例gevent的原理(gevent本质上:单进程单线程实现为多个套接字服务的原理)
2.思路:
1.创建服务器:创建、绑定、、被动、监听、循环创新(新函数实现收发:堵塞以收信息--发)
2.关闭堵塞(.setblocking(False))--会产生错误--try--有异常就是无客户端连接/无数据发过来,无异常就是有交互
3.创建一个列表保存心得套接字--遍历--异常判断try--有异常就是无客户端连接/无数据发过来,无异常就是有交互
4.大循环:有无客户端;小循环:有无数据
"""
import socket
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
local_addr = ("192.168.101.31", 8088)
tcp_socket.bind(local_addr)
tcp_socket.listen()
socket_list = []
tcp_socket.setblocking(False)
while True:
try:
new_socket, new_addr = tcp_socket.accept()
except Exception as error:
print("---没有客户端连接---")
else:
socket_list.append(new_socket)
for new_li_socket in socket_list:
new_li_socket.setblocking(False)
try:
recv_data = new_li_socket.recv(1024).decode("utf-8")
except Exception as error:
print("没有发")
else:
if recv_data:
response = input("回复:")
new_li_socket.send(response.encode("utf-8"))
else:
print("一个客户端关闭")
socket_list.remove(new_li_socket)
new_li_socket.close()
tcp_socket.close()
if __name__ == "__main__":
main()