在python中简单地连续运行XMPP客户机

2024-05-16 22:45:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python xmpp发送jabber消息。一切正常,只是每次我想发送消息(每15分钟一次),我需要重新连接到jabber服务器,同时发送客户端脱机,无法接收消息。

所以我想写一个非常简单的,无限期运行的xmpp客户端,它是在线的,并且可以在需要的时候发送(和接收)消息。

我的琐碎(非工作)方法:

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('receiver@example.org', 'hello world')
    time.sleep(30)

这里的问题似乎是我无法唤醒它。我最好的猜测是我需要某种程度的并发。是真的吗?如果是,我该怎么办?

编辑:在研究了所有关于并发的选项之后,我决定使用twisted和wokkel。如果可以的话,我会删除这篇文章。


Tags: importselfclientsend消息客户端messageserver
2条回答

xmpppy本身(python xmpp的另一个名称)的homepage上有一个很好的例子,它几乎可以满足您的需要:xtalk.py

它基本上是一个控制台jabber客户端,但应该不难重写成你想要的机器人。

它总是在线的,可以收发信息。我不认为这里需要多处理(或其他并发)模块,除非您需要在完全相同的时间接收和发送消息。

通过Process(timeout)方法的循环是一种在保持连接的同时等待和处理任何新的传入节的好方法。

相关问题 更多 >