Collegamento Python ritorto cliente ha perso
-
13-10-2019 - |
Domanda
Ho questo client contorta, che si collega con un server contorto avere un indice. Ho eseguito questo client da riga di comando. Ha funzionato bene. Ora ho modificato per eseguire in loop (vedi main()
) in modo che io possa mantenere l'esecuzione di query. Ma il cliente viene eseguito solo una volta. La prossima volta si dice semplicemente connection lost \n Connection lost - goodbye!
.
Che cosa sto facendo di sbagliato? Nel ciclo sto riconnessione al server, che non va?
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()
Soluzione
Non riesco a capire come funziona il reattore intrecciati.
reactor.run()
si sta avviando evento-loop del reattore --- è una chiamata di blocco che loop "per sempre".
http://twistedmatrix.com/documents/10.2 .0 / core / howto / reattore-basics.html per vari argomenti reattore-correlato.