socketserver通信并发处理
2019-07-16 本文已影响0人
温柔倾怀
实现效果
服务端并发处理客户端请求

重点在服务端的改动--TCP实现
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
print("conn is:",self.request) #相当于conn;
print("addr is:",self.client_address) #相当于addr;
#通信循环
while True:
try:
#收消息
data = self.request.recv(1024)
if not data:break
print("收到客户端消息是:",data)
#发消息
self.request.sendall(data.upper())
except ConnectionResetError as e:
print(e)
break
if __name__ == '__main__':
s = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer) #内部其实实现了连接循环 多线程
s.serve_forever()
基于UDP的socketserver
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
print(self.request)
#(b'nihaoi', <socket.socket fd=288, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>)
print("客户端发来:",self.request[0])
self.request[1].sendto(self.request[0].upper(),self.client_address)
if __name__ == '__main__':
s = socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyServer) #内部其实实现了连接循环
s.serve_forever()
socketserver模块
-
server类处理链接
- request类处理通信