如何在 Python 中使用 XMPP 客户端获得响应

Posted

技术标签:

【中文标题】如何在 Python 中使用 XMPP 客户端获得响应【英文标题】:How can I get a response with XMPP client in Python 【发布时间】:2010-06-25 21:17:59 【问题描述】:

我在 Python 中使用 XMPP,我可以发送消息,但我如何接收?

【问题讨论】:

【参考方案1】:

我必须注册一个处理程序和进程:

def messageCB(sess,mess):
    print 'MESSAGE'*100
    nick=mess.getFrom().getResource()
    text=mess.getBody()
    #print mess,nick
    print text

client.RegisterHandler('message',messageCB)

while 1:
    client.Process(1)

【讨论】:

【参考方案2】:

好帖子。我注意到这段代码 sn-p 也在 xmpppy sourceforge 网站的记录器示例中。

我想知道是否可以回复收到的消息。上面的代码只接收并且昵称资源 ID 不指示发送者是谁(根据 JID 格式,user@server),除非 xmpppy 可以适当地翻译它。那么如何将收到的消息和“回显”回发送者呢?还是用 xmpppy 库不容易做到这一点,需要寻找不同的 XMPP 库?

【讨论】:

当然可以:这是一个sn-p,放在func messageCB client = xmpp.Client('yourdomain.com') client.connect(server=('talk.google. com',5223)) client.RegisterHandler('message',messageCB) client.auth(USERNAME, PASSWD, 'talk.google.com') client.sendInitPresence() message = xmpp.Message(to, msg) message.setAttr ('type', 'chat') client.send(message) 谢谢,但问题是当您不知道发件人是谁时,如何定义邮件的“收件人”字段?处理程序只是侦听来自任何人的用户消息。我测试了代码,返回的资源 ID(或昵称)更像是一个会话 ID,因为它不像“用户”或“用户@服务器”。我没有测试过,但我的假设是你不能简单地将收到的 nick 值作为你将发送的传出消息的“to”值传递,或者你可以吗? 如果你看到 mess.getFrom() 你会得到类似 user@domain.com/nick 说,我注意到这段代码 sn-p,当与 conn.sendInitPresence() 一起使用并保持运行一段时间时,只会在服务器认为用户离线之前保持在线一段时间,即使代码/应用程序仍在运行。我必须退出应用程序并重新启动它才能重新注册状态。任何想法在工具运行时添加什么存在处理程序或添加什么代码来“保持活跃”用户的存在?仅供参考,如果这很重要,我已登录 Openfire XMPP 服务器。

以上是关于如何在 Python 中使用 XMPP 客户端获得响应的主要内容,如果未能解决你的问题,请参考以下文章

龙卷风 Web 应用程序中的 Python xmpp jabber 客户端

XMPP 会话附件

如何在 slimxmpp python 中为 gcm ccs 请求创建 xmpp 节?

如何使用 simple-xmpp/node-xmpp 获得 Jabber 用户的名册?

XMPP 与 Facebook Chat 集成,使用 Python

如何获得 XMPP 子组?