基于TCP通过socketserver简单实现并发效果
一、首先介绍一下 socketserver 模块中的类:
类 | 描述 |
BaseServer | 包含服务器的核心功能与混合(mix-in)类的钩子功能。这个类用于派生,不要直接生成这个类的类对象 |
TCPServer/UDPServer | 基本的网络同步TCP\UDP服务器 |
UnixStreamServer/UnixDatagramServer | 基本的基于文件同步TCP\UDP服务器 |
ForkingTCPServer/ForkingUDPServer | ForkingMixIn 和 TCPServer/UDPServer 的组合 |
StreamRequestHandler/DatagramRequestHandler | TCP/UDP 服务器的请求处理类的一个实现 |
ThreadingTCPServer/ThreadingUDPServer | ThreadingMixIn 和 TCPServer/UDPServer 的组合 |
BaseRequestHandler | 包含处理服务请求的核心功能。只用于派生新的类,不要直接生成这个类的对象,可以考虑使用StreamRequestHandler或DatagramRequestHandler |
# 服务端 # -*- coding: utf-8 -*- import socketserver class MyTCPhandler(socketserver.BaseRequestHandler):
# handle 方法必须定义,因为在该继承的父类中已经定义了该接口 def handle(self): while True: try: data = self.request.recv(1024) if len(data) == 0: break print('收到客户端消息:%s' % data) self.request.send(data.upper()) except ConnectionResetError: break self.request.close() if __name__ == '__main__': # socketserver在windows系统之上,不支持多进程 server = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyTCPhandler) server.serve_forever() # 连接循环
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
# 客户端 from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('127.0.0.1', 8080)) while True: data = input('>>>:').strip() if not data: continue # client.send('hello'.encode('utf-8')) client.send(data.encode('utf-8')) get_data = client.recv(1024) print(get_data.decode('utf-8'))

更多精彩