При наличии 1-дневного опыта в Скрученном я пытаюсь запланировать сообщение, отправляющее в ответ на клиента TCP:
import os, sys, time
from twisted.internet import protocol, reactor
self.scenario = [(1, "Message after 1 sec!"), (4, "This after 4 secs"), (2, "End final after 2 secs")]
for timeout, data in self.scenario:
reactor.callLater(timeout, self.sendata, data)
print "waited %d time, sent %s\n"%(timeout, data)
Теперь это отправляет сообщения, но у меня есть 2 проблемы:
1) "тайм-аут" идет от "теперь", и я хочу считать его после того, как каждая предыдущая задача была выполнена (предыдущее сообщение было отправлено),
2) Я не знаю, как закрыть соединение после того, как все сообщения были отправлены. Если я помещаю self.transport.loseConnection()
после callLater
s это сразу закрывает соединение.
В предыдущей попытке я не использовал reactor.callLater
, но только self.transport.write()
и time.sleep(n)
в for
цикл. В этом случае все сообщения были отправлены вместе после того, как все тайм-ауты передали... Не что-то я хотел.
Цель состоит в том, чтобы ожидать соединения клиента, ожидать timeout1 и отправить message1, ожидать timeout2 и отправить message2... и т.д. После заключительного сообщения - закрывают соединение.