Ich musste einen TCP-Client schreiben, also suchte ich. Zuerst habe ich mit dem Modul socket geschrieben, aber mit Twisted ist es einfach. Es war einfach zu schreiben und erneut zu versuchen, also irgendwie.
Es gibt Hardware, die regelmäßig Sensordaten erfassen und über TCP nach außen senden kann. Es stellt eine Verbindung dazu her, protokolliert die empfangenen Daten und führt eine beliebige Verarbeitung durch.
Die Hardware, die zum Server wird, ist kein Protokoll, das eine Authentifizierung oder einen Aufruf erfordert, sondern verschüttet nur Daten.
protocol.py
import logging
from twisted.internet.protocol import Protocol
logger = logging.getLogger(__name___)
#Klasse, die das Protokoll verarbeitet
class SomeProtocol(Protocol):
def dataReceived(self, data):
logger.debug(u'data received. data: %s' % data)
#In Protokolldatei schreiben
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___)
#Client-Klasse. Es ist diese Klasse, die den Verbindungsprozess tatsächlich ausführt.
class SomeServerClient(ReconnectingClientFactory):
protocol = SomeProtocol
def buildProtocol(self, addr):
"""Instanziierungsmethode für Protokollklassen
"""
logging.info(u'Successfully connected to %s' % addr)
self.resetDelay() #Wiederherstellungsverzögerung wiederherstellen
protocol = self.protocol()
protocol.factory = self
return protocol
def startedConnecting(self, connector):
"""Wird nach der Verbindung aufgerufen
"""
logger.info(u'Started to connect.')
def clientConnectionLost(self, connector, reason):
"""Handler bei Verbindungsverlust
"""
logger.warning(u'Lost connection. Reason: %s', reason)
ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
def clientConnectionFailed(self, connector, reason):
"""Handler, wenn die Verbindung fehlschlägt
"""
logger.error(u'Connection failed. Reason: %s' % reason)
ReconnectingClientFactory.clientConnectionFailed(self, connector, reason)
Stellen Sie über das Reaktormodul eine Verbindung zum TCP-Server her.
from twisted.internet import reactor
reactor.connectTCP('127.0.0.1', 5403, SomeServerClient())
reactor.run()
Twisted Es ist nicht sehr schnell und gevent ist gut, also hat mir @masahif gesagt, dass ich es später nachschlagen werde.
Dieses Mal verarbeiten ein einzelner Server und ein einzelner Client nur die Daten, die jede Sekunde fließen, sodass Sie sich keine Gedanken über die Geschwindigkeit machen müssen. Es wäre schön, wenn Sie einfach schreiben könnten, was Sie tun möchten (Wiederholungsverarbeitung), also Twisted Es sieht okay aus.
Recommended Posts