Python Twisted Client -Verbindung verloren
-
13-10-2019 - |
Frage
Ich habe diesen verdrehten Client, der mit einem verdrehten Server eine Index mit einem Index verbindet. Ich habe diesen Client von der Befehlszeile geleitet. Es hat gut funktioniert. Jetzt habe ich es so geändert, dass es in Schleife ausgeführt wird (siehe main()
) damit ich weiter abfragen kann. Aber der Kunde läuft nur einmal. Das nächste Mal sagt es einfach einfach connection lost \n Connection lost - goodbye!
.
Was mache ich falsch? In der Schleife verbinde ich wieder mit dem Server, so falsch?
from twisted.internet import reactor
from twisted.internet import protocol
from settings import AS_SERVER_HOST, AS_SERVER_PORT
# a client protocol
class Spell_client(protocol.Protocol):
"""Once connected, send a message, then print the result."""
def connectionMade(self):
self.transport.write(self.factory.query)
def dataReceived(self, data):
"As soon as any data is received, write it back."
if data == '!':
self.factory.results = ''
else:
self.factory.results = data
self.transport.loseConnection()
def connectionLost(self, reason):
print "\tconnection lost"
class Spell_Factory(protocol.ClientFactory):
protocol = Spell_client
def __init__(self, query):
self.query = query
self.results = ''
def clientConnectionFailed(self, connector, reason):
print "\tConnection failed - goodbye!"
reactor.stop()
def clientConnectionLost(self, connector, reason):
print "\tConnection lost - goodbye!"
reactor.stop()
# this connects the protocol to a server runing on port 8090
def main():
print 'Connecting to %s:%d' % (AS_SERVER_HOST, AS_SERVER_PORT)
while True:
print
query = raw_input("Query:")
if query == '': return
f = Spell_Factory(query)
reactor.connectTCP(AS_SERVER_HOST, AS_SERVER_PORT, f)
reactor.run()
print f.results
return
if __name__ == '__main__':
main()
Lösung
Sie verstehen nicht ganz, wie der verdrehte Reaktor funktioniert.
reactor.run()
Startet die Event-Schleife des Reaktors --- Es ist ein blockierender Anruf, der "für immer" ist.
Sehen http://twistedmatrix.com/documents/10.2.0/core/howto/reactor-basics.html für verschiedene reaktorbezogene Themen.