Ayant une expérience de 1 jour dans Tordu essayer de programmer l'envoi de messages en réponse au client tcp:Python tordu: comment programmer?
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)
Maintenant, il envoie des messages, mais j'ai 2 problèmes:
1) « délai d'attente » va de " maintenant ", et je veux le compter après que chaque tâche précédente soit terminée (le message précédent a été envoyé)
2) Je ne sais pas comment fermer la connexion après que tous les messages ont été envoyés. Si je place self.transport.loseConnection()
après callLater
il ferme la connexion immédiatement.
Essai précédent je ne pas utiliser reactor.callLater
, mais seulement self.transport.write()
et time.sleep(n)
en boucle for
. Dans ce cas, tous les messages ont été envoyés ensemble après tous les délais d'attente passés ... Pas quelque chose que je voulais.
Le but est d'attendre la connexion du client, d'attendre timeout1 et d'envoyer message1, d'attendre timeout2 et d'envoyer message2, ... etc. Après le message final - fermer la connexion.
Merci, maintenant je comprends pourquoi "sommeille" ne fonctionne pas. Pouvez-vous donner un exemple avec la planification de reactor.callLater() à la fin du précédent reactor.callLater()? – DominiCane
Définissez simplement une fonction qui appelle 'self.sendata (data)', puis appelle 'reactor.callLater()' pour le rappel suivant, et passez cette fonction au premier 'reactor.callLater()' au lieu de 'self.sendata ' –