J'ai dû écrire un client TCP, alors j'ai cherché. Au début, j'ai écrit en utilisant le module socket, mais utiliser Twisted est simple. C'était facile à écrire et à réessayer, donc d'une manière ou d'une autre.
Il existe du matériel qui peut acquérir périodiquement des données de capteur et les envoyer à l'extérieur via TCP. Il s'y connecte, enregistre les données reçues et effectue un traitement arbitraire.
Le matériel qui devient le serveur n'est pas un protocole qui nécessite une authentification ou un appel, il renverse simplement des données.
protocol.py
import logging
from twisted.internet.protocol import Protocol
logger = logging.getLogger(__name___)
#Classe qui gère le protocole
class SomeProtocol(Protocol):
def dataReceived(self, data):
logger.debug(u'data received. data: %s' % data)
#Exporter vers le fichier journal
f = open('log.dat', 'ab')
f.write(data)
f.close()
client.py
import logging
from twisted.internet.protocol import ReconnectingClientFactory
from .protocol import SomeProtocol
logger = logging.getLogger(__name___)
#Classe de client. C'est cette classe qui effectue réellement le processus de connexion.
class SomeServerClient(ReconnectingClientFactory):
protocol = SomeProtocol
def buildProtocol(self, addr):
"""Méthode d'instanciation de classe de protocole
"""
logging.info(u'Successfully connected to %s' % addr)
self.resetDelay() #Restaurer le délai de nouvelle tentative
protocol = self.protocol()
protocol.factory = self
return protocol
def startedConnecting(self, connector):
"""Appelé après la connexion
"""
logger.info(u'Started to connect.')
def clientConnectionLost(self, connector, reason):
"""Handler en cas de perte de connexion
"""
logger.warning(u'Lost connection. Reason: %s', reason)
ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
def clientConnectionFailed(self, connector, reason):
"""Gestionnaire lorsque la connexion échoue
"""
logger.error(u'Connection failed. Reason: %s' % reason)
ReconnectingClientFactory.clientConnectionFailed(self, connector, reason)
Connectez-vous au serveur TCP à l'aide du module réacteur.
from twisted.internet import reactor
reactor.connectTCP('127.0.0.1', 5403, SomeServerClient())
reactor.run()
Twisted Ce n'est pas très rapide et gevent est bon, alors @masahif me l'a dit donc je vais le chercher plus tard.
Cette fois, un seul serveur et un seul client ne traitent que les données qui circulent toutes les secondes, vous n'avez donc pas à vous soucier de la vitesse, et ce serait bien si vous pouviez facilement écrire ce que vous voulez faire (réessayer le traitement), donc Twisted Ça a l'air bien.
Recommended Posts