首页 > 其他 > 详细

TCP服务端-协程版(推荐)

时间:2019-12-07 17:27:29      阅读:125      评论:0      收藏:0      [点我收藏+]

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

 

TCP服务端-协程版(推荐)

原文:https://www.cnblogs.com/chao666/p/12002159.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!