向所有连接的客户端/资源发送 xmpp 消息

Posted

技术标签:

【中文标题】向所有连接的客户端/资源发送 xmpp 消息【英文标题】:Send an xmpp message to all connected clients/resources 【发布时间】:2012-12-05 23:44:48 【问题描述】:

如何使用 Python 库向所有连接的客户端/资源发送一条 XMPP 消息,例如:

xmpppy、jabber.py、jabberbot。任何其他命令行解决方案都很好。

到目前为止,我只能向一个客户端发送回显或一条消息。

目的是向所有连接的资源/客户端发送消息,而不是分组。 这可能由命令触发,但不是“真正”必要的。

谢谢。

【问题讨论】:

您要将其发送给所有连接的客户端,还是特定客户端的所有会话(即共享相同基本 JID 的所有客户端)? 我想将消息发送给所有在场的客户。所有连接的客户端都将存在。 【参考方案1】:

我不能给你一个具体的python例子,但我解释一下逻辑是如何工作的。

当您向裸 Jid 发送消息时,它取决于服务器软件或配置如何路由。有些服务器将消息发送到“最可用资源”,有些服务器将消息发送到所有资源。例如。 Google Talk 将其发送给所有资源。

如果您控制服务器软件并且它允许您将消息路由到裸 Jid 到所有连接的资源,那么这将是最简单的方法。

当您的代码必须在任何服务器上运行时,您应该收集联系人的所有可用资源。您可以通过存在获得它们,大多数库对此都有回调。然后你可以循环发送消息给完整的Jids(带有资源)。

【讨论】:

【参考方案2】:

我认为如果您为所有连接的资源设置相同的优先级,它会起作用,但我实际上并没有尝试。

但是在 ejabberd 中有一个名为 Mssage Carbon 的模块可以为您执行此操作,此功能或属性也可以在“route.all-resource”的名称下公开使用。

提示:如果使用消息碳,XMPP 客户端库也应该支持它以使其正常工作。

【讨论】:

以上是关于向所有连接的客户端/资源发送 xmpp 消息的主要内容,如果未能解决你的问题,请参考以下文章

XMPP 客户端接收服务器消息

Python xmpppy客户端未向appengine xmpp客户端发送消息

如何使用 xmpppy 向 jabber 客户端发送消息?

向房间发送 XMPP IM 消息

XMPP 框架:无法接收我的消息

XMPP 发送消息不起作用