Python Twisted Client Connect
-
13-10-2019 - |
Вопрос
У меня есть этот извращенный клиент, который подключается к скрученному серверу, имеющему индекс. Я управлял этим клиентом из командной строки. Это сработало нормально. Теперь я изменил его, чтобы запустить в петле (см. main()
) так, чтобы я мог продолжать запрашивать. Но клиент работает только один раз. В следующий раз, когда это просто говорит connection lost \n Connection lost - goodbye!
.
Что я делаю не так? В цикле я воссоединяюсь с сервером, это так неправильно?
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()
Решение
Вы не совсем понимаете, как работает скрученный реактор.
reactor.run()
Запускает петлю события реактора-это блокирующий звонок, который навсегда «навсегда».
Видеть http://twistedmatrix.com/documents/10.2.0/core/howto/reactor-basics.html Для различных тем, связанных с реактором.