Maison > Article > développement back-end > Introduction à la méthode de réalisation d'une communication non bloquante entre client et serveur à l'aide de SocketServer en Python
Utilisez le module SocketServer pour implémenter des connexions simultanées et une communication non bloquante entre les clients et les serveurs du réseau.
Tout d'abord, comprenons les classes disponibles dans le module SocketServer :
BaseServer : contient le noyau du serveur La fonction est accrochée à la classe mix-in ; cette classe n'est utilisée que pour la dérivation, donc les instances de cette classe ne seront pas générées ;
TCPServer/UDPServer : serveur TCP/UDP de synchronisation réseau de base.
UnixStreamServer/UnixDatagramServer : serveur TCP/UDP de synchronisation de base basée sur les fichiers.
ForkingMixIn/ ThreadingMixIn : implémente le processus principal ou les fonctions de thread en tant que classe hybride, utilisée avec la classe serveur pour fournir certaines fonctionnalités asynchrones ; cette classe ne sera pas instanciée directement.
ForkingTCPServer/ForkingUDPServer : Une combinaison de ForkingMixIn et TCPServer/UDPServer.
BaseRequestHandler : contient la fonctionnalité de base pour gérer les demandes de service. Cette classe est uniquement destinée à la dérivation, donc les instances de cette classe ne seront pas générées. Pensez à utiliser StreamRequestHandler ou DatagramRequestHandler.
StreamRequestHandler/ DatagramRequestHandler : outil de traitement de services pour les serveurs TCP/UDP.
Maintenant, nous entrons officiellement dans le sujet. Ici, nous utilisons StreamRequestHandler et ThreadingTCPServer pour réaliser des connexions socket simultanées non bloquantes entre le client et le serveur.
ThreadingTCPServer est dérivé de ThreadingMixIn et implémente principalement la combinaison de processus de base et la fonction de threading.
StreamRequestHandler est principalement utilisé comme outil de traitement de services pour les serveurs TCP/UDP.
1. Créer un serveur SocketServerTCP
#创建SocketServerTCP服务器: import SocketServer from SocketServer import StreamRequestHandler as SRH from time import ctime host = 'xxx.xxx.xxx.xxx' port = 9999 addr = (host,port) class Servers(SRH): def handle(self): print 'got connection from ',self.client_address self.wfile.write('connection %s:%s at %s succeed!' % (host,port,ctime())) while True: data = self.request.recv(1024) if not data: break print data print "RECV from ", self.client_address[0] self.request.send(data) print 'server is running....' server = SocketServer.ThreadingTCPServer(addr,Servers) server.serve_forever()
2. Créer un client SocketServerTCP
#from socket from socket import * host = 'xxx.xxx.xxx.xxx' port = 9999 bufsize = 1024 addr = (host,port) #client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client = socket(AF_INET,SOCK_STREAM) client.connect(addr) while True: data = raw_input() if not data or data=='exit': break client.send('%s\r\n' % data) data = client.recv(bufsize) if not data: break print data.strip() client.close()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!