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

Introduction à la méthode de réalisation d'une communication non bloquante entre client et serveur à l'aide de SocketServer en Python

高洛峰
高洛峰original
2017-03-20 11:47:481687parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn