【问题标题】:Simple continuously running XMPP client in python在 python 中简单连续运行的 XMPP 客户端
【发布时间】:2010-11-24 17:01:48
【问题描述】:

我正在使用 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。如果可以的话,我会删除这个帖子。

【问题讨论】:

  • 如果您希望能够同时发送和接收消息,您将需要并发。查看multiprocessing 模块或那里的许多教程之一。

标签: python xmpp


【解决方案1】:

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

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

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

【讨论】:

  • 文档有点稀疏。使用 xtalk.py 示例,如何打印收到的消息?
  • @Andrew:仔细看看 xmpp_message 函数。
【解决方案2】:

Process(timeout) 方法上的循环是等待和处理任何新传入节同时保持连接正常的好方法。

【讨论】:

    猜你喜欢
    • 2013-08-26
    • 2016-01-09
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多