Conexión Python Twisted Cliente Perdido
-
13-10-2019 - |
Pregunta
Tengo este cliente trenzado, que se conecta con un servidor de trenzado que tienen un índice. Me encontré con este cliente de línea de comandos. Funcionó bien. Ahora he modificado para que se ejecute en bucle (ver main()
) de modo que pueda mantener consultas. Pero el cliente se ejecuta sólo una vez. La próxima vez que simplemente dice connection lost \n Connection lost - goodbye!
.
¿Qué estoy haciendo mal? En el bucle estoy volver a conectar con el servidor, que mal?
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()
Solución
No entiendo muy bien cómo funciona el reactor Twisted.
reactor.run()
se está iniciando evento de circuito del reactor --- es una llamada de bloqueo que los bucles "para siempre".
http://twistedmatrix.com/documents/10.2 0,0 / core / howto / reactor-basics.html para diversos temas de reactor-relacionada.