So habe ich einen Hauptserver in verdrehten geschrieben. Ich möchte einen Backup-Server auf einem anderen Port ausführen, wenn der erste Client eine Verbindung herstellt. Dieses Verhalten sollte nicht wiederholt werden, wenn der zweite Client eine Verbindung herstellt. Der Sicherungsserver sollte auch geschlossen werden, wenn der letzte Client die Verbindung trennt.
Wie kann ich dieses Verhalten implementieren? Momentan führe ich eine Batch-Datei aus, bevor der Reaktor startet. Aber das Problem ist, dass dies eine unendliche Schleife erzeugen würde. Aber ich gebe ein Argument, das es stoppen kann. Dies bedeutet jedoch, dass, wenn der Hauptserver ausfällt und der Backup-Server Clients annimmt, Backup-Server übrig sind.Führen Sie etwas, wenn der erste Client in twisted verbindet?
Antwort
Sie müssen die connectionMade
und connectionLost
Ereignisse des Twisted-Protokoll anschließen. In diesen können Sie Ihre Geschäftslogik implementieren.
Schauen Sie folgende Ereignisse auf:
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
class Protocol(LineReceiver):
def __init__(self, factory):
self.factory = factory
def connectionMade(self):
self.factory.clients.add(self)
print('Client added. count:', len(self.factory.clients))
def connectionLost(self, reason):
self.factory.clients.remove(self)
print('Client removed. count:', len(self.factory.clients))
def lineReceived(self, line):
self.transport.write(line)
class MyFactory(Factory):
def __init__(self):
self.clients = set()
def buildProtocol(self, addr):
return Protocol(self)
reactor.listenTCP(1520, MyFactory())
reactor.run()
Sie diesen Server mit Telnet testen:
telnet 127.0.0.1 1520
Ich habe es größtenteils funktioniert. Eine abschließende Frage, sobald der Server bei 1520 aufhört zu laufen, wie mache ich den Client connect Verbindung zu dem neuen Server, den ich bei 1521 bin. Ich benutze die connectionLost() Methode auf dem Client-Code, innerhalb dessen ich selbst aufrufen .makeConnection (1521) dies löst den Rückruf connectionMade(), aber im nächsten Augenblick löst es clientConnectionLost Methode in twisted.internet.protocol.ClientFactory. Wie mache ich die neue Verbindung bestehen? –
Erstellen Sie eine neue Frage mit Ihrem vorhandenen Code. Das wäre viel einfacher, Sie zu unterstützen. –
https://stackoverflow.com/questions/46538287/reconnect-to-different-address-in-twisted –
- 1. Wenn Kontrollkästchen aktiviert ist, führen Sie "etwas"
- 2. twisted: ein Client, viele Server
- 3. twisted HTTP-Client
- 4. Twisted - Kick spezifischen Client
- 5. Twisted erkennt Client nicht getrennt
- 6. Twisted-Network-Client mit Multiprocessing-Mitarbeitern?
- 7. Wie Client verbindet, wenn man redis Knoten
- 8. Twisted HTTP-Client mit Client-Zertifikat
- 9. Socket.io-Client verbindet nicht
- 10. C# Server-Client, Client verbindet sich nicht
- 11. Führen Sie etwas einmal in einer rekursiven JavaScript-Funktion
- 12. UDP-Client und -Server mit Twisted Python
- 13. Python Jabber/XMPP-Client-Bibliothek für Twisted
- 14. Twisted: Anzahl der Client-Verbindungen zu TCP-Server begrenzt?
- 15. Führen Sie das zweite Szenario nur, wenn der erste in JBehave geht
- 16. Ein TCP-Quote Server und Client in Twisted Python Fehler
- 17. iOS - MQTT Client Framework verbindet/funktioniert
- 18. Verwenden Sie Rohr ohne das erste Argument zu führen
- 19. socket.io-Client verbindet, aber nicht emittiert
- 20. Python Twisted SSH-Client: Client blockiert nach dem Senden von 10 Befehlen
- 21. Führen Sie die zweite Abfrage aus, wenn die erste Abfrage keine Ergebnisse zurückgibt, und geben Sie
- 22. Unter starken Belastung, Client zu einem socket.io verbindet, kann das erste Paket mit node.js
- 23. Fehlerbehandlung in Twisted-
- 24. Autobahn + Twisted Wiederverbinden
- 25. UDP-Client verbindet sich nicht automatisch
- 26. Postgresql - Einfügen, wenn wählen Sie etwas zurückgeben
- 27. Twisted Alternative in C++
- 28. Führen Sie eine Methode aus, ohne den Client zu blockieren
- 29. Twisted: Wie kann ich Nachrichten per Twisted Client über einen einzelnen Port senden?
- 30. Führen Sie "Aktionen" in der Statusleiste Widget
Kann ich Ihnen helfen, mit der Antwort? –
Ich arbeite daran. –