利用gevent第三方库,实现协程。
通过协程实现一个服务端服务多个客户端需求。
使用协程的好处是协程比线程更加节省内存资源。
gevent安装命令:
pip3 install gevent
注意:在安装gevent库之前,需要更新pip版本,只需要在终端窗口执行以下命令即可:
python -m pip install --upgrade pip
TCP服务端-协程版本:
1 import socket 2 import gevent 3 from gevent import monkey 4 5 # 打补丁 6 monkey.patch_all() 7 8 9 def handle_client_socket(new_socket, ip_port): 10 print("建立连接成功:", ip_port) 11 while True: 12 recv_data = new_socket.recv(1024) 13 if recv_data: 14 recv_data_decode = recv_data.decode("UTF-8") 15 print("服务端接收的数据为:", recv_data_decode) 16 else: 17 print("客户端下线了", ip_port) 18 break 19 # 8.使用新的套接字发送数据 20 send_data_input = input("请输入回复的消息:") 21 send_data = send_data_input 22 send_data_encode = send_data.encode("UTF-8") 23 new_socket.send(send_data_encode) 24 # 7.使用新的套接字接收数据,并设置最大数据接收长度为1024 25 26 # 9.关闭套接字 27 # 与客户端断开通信 28 new_socket.close() 29 30 31 # 1.导入模块 32 if __name__ == '__main__': 33 # 2.创建套接字对象 34 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 35 36 # 3.设置端口复用 37 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) 38 39 # 4.绑定端口 40 tcp_server_socket.bind(("", 9090)) 41 42 # 5.设置监听,并设置最大等待连接数为128 43 tcp_server_socket.listen(128) 44 while True: 45 # 6.等待客户端建立连接,并接收accpet()返回的新的套接字对象,和客户端IP+端口号 46 new_socket, ip_port = tcp_server_socket.accept() 47 gevent.spawn(handle_client_socket, new_socket, ip_port) 48 49 # 停止服务端服务 50 # tcp_server_socket.close()