Ecrire un client TCP avec Python Twisted

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.

Chose que tu veux faire

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.

j'écrirai

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)

Essayez de courir

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()

Autre

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.

Je veux le lire ensemble

Recommended Posts

Ecrire un client TCP avec Python Twisted
Ecrire un script batch avec Python3.5 ~
"Première recherche élastique" commençant par un client python
Je veux écrire dans un fichier avec Python
Faites une loterie avec Python
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
Écrire en csv avec Python
Créer un répertoire avec python
Créons un client de socket Web avec Python. (Authentification par jeton d'accès)
[Python] Qu'est-ce qu'une instruction with?
Ecrire une dichotomie en Python
Résoudre ABC163 A ~ C avec Python
Manuel de graphisme Python avec Matplotlib.
[Python] Ecrire dans un fichier csv avec Python
Faisons une interface graphique avec python.
Créez un environnement virtuel avec Python!
Ecrire des algorithmes A * (A-star) en Python
J'ai fait une loterie avec Python.
Ecrire un réseau résiduel avec TFLearn
Créer un environnement virtuel avec Python 3
Résoudre ABC168 A ~ C avec Python
Créer un système de recommandation avec python
Ecrire un graphique à secteurs en Python
[Python] Générer un mot de passe avec Slackbot
Résoudre ABC162 A ~ C avec Python
Résoudre ABC167 A ~ C avec Python
Résoudre ABC158 A ~ C avec Python
Faisons un graphe avec python! !!
Ecrire un serveur TCP super simple
[Python] Hériter d'une classe avec des variables de classe
J'ai créé un démon avec Python
Écrire un histogramme empilé avec matplotlib
[Pyenv] Construire un environnement python avec ubuntu 16.04
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Créer un décorateur de fonction Python avec Class
Créer un fichier power simple avec Python
Un client HTTP simple implémenté en Python
Installer Python en tant que Framework avec pyenv
Client API Slack simple réalisé avec Python
Créez une image factice avec Python + PIL.
Ecrire le test dans la docstring python
J'ai fait un compteur de caractères avec Python
[Python] Dessiner un motif de tourbillon avec une tortue
Effectuez périodiquement un traitement arbitraire avec Python Twisted
J'ai dessiné une carte thermique avec Seaborn [Python]
[Python] Créez un environnement virtuel avec Anaconda
Créons un groupe gratuit avec Python
Un mémo contenant Python2.7 et Python3 dans CentOS
Création d'un environnement Python 3.6 avec Windows + PowerShell
Carte des informations de location sur une carte avec python
Rechercher le labyrinthe avec l'algorithme python A *
Ecrire une courte définition de propriété en Python
Démonisez une application Web Python avec Supervisor
Faisons la voix lentement avec Python
Créé un voyage de fléchettes avec python (news)
Ecrire un programme de chiffrement Caesar en Python