Maison > développement back-end > Tutoriel Python > 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

高洛峰
Libérer: 2017-03-20 11:47:48
original
1719 Les gens l'ont consulté

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()
Copier après la connexion

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()
Copier après la connexion


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal