J'utilise python-xmpp pour envoyer des messages jabber. Tout fonctionne bien sauf que chaque fois que je veux envoyer des messages (toutes les 15 minutes), je dois me reconnecter au serveur jabber, et entre-temps le client expéditeur est hors ligne et ne peut pas recevoir de messages. Donc, je veux écrire un client xmpp très simple, qui fonctionne indéfiniment, qui est en ligne tout le temps et peut envoyer (et recevoir) des messages lorsque cela est nécessaire.Simple client XMPP en continu fonctionnant en python
Mon approche triviale (non-travail):
import time
import xmpp
class Jabber(object):
def __init__(self):
server = 'example.com'
username = 'bot'
passwd = 'password'
self.client = xmpp.Client(server)
self.client.connect(server=(server, 5222))
self.client.auth(username, passwd, 'bot')
self.client.sendInitPresence()
self.sleep()
def sleep(self):
self.awake = False
delay = 1
while not self.awake:
time.sleep(delay)
def wake(self):
self.awake = True
def auth(self, jid):
self.client.getRoster().Authorize(jid)
self.sleep()
def send(self, jid, msg):
message = xmpp.Message(jid, msg)
message.setAttr('type', 'chat')
self.client.send(message)
self.sleep()
if __name__ == '__main__':
j = Jabber()
time.sleep(3)
j.wake()
j.send('[email protected]', 'hello world')
time.sleep(30)
semble ici Le problème est que je ne peux pas le réveiller. Ma meilleure supposition est que j'ai besoin d'une sorte de concurrence. Est-ce vrai, et si oui, comment ferais-je le mieux?
EDIT: Après avoir examiné toutes les options concernant la concurrence, j'ai décidé d'aller avec twisted et wokkel. Si je pouvais, je supprimerais ce post.
Si vous souhaitez être en mesure d'envoyer et de recevoir des messages en même temps, vous aurez besoin de la simultanéité. Regardez dans le module 'multiprocessing' ou l'un des nombreux tutoriels là-bas. – katrielalex