Python中的Tcp协议应用之TCP服务端-协程版(推荐)

利用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()

 

posted @ 2019-12-07 16:18  老王同鞋  阅读(554)  评论(0编辑  收藏  举报