【发布时间】:2014-01-05 00:35:30
【问题描述】:
如何知道消息是使用XMPP framework 和ejabberd 传递给其他用户的,我们使用XEP-0184 类作为消息传递收据,我们在发送消息时发送收据请求但没有得到任何回应。
我的查询是我是否需要在服务器上配置任何内容(或 ejabberd.cfg 文件中的任何更改)或任何我们需要做的客户端代码。
【问题讨论】:
如何知道消息是使用XMPP framework 和ejabberd 传递给其他用户的,我们使用XEP-0184 类作为消息传递收据,我们在发送消息时发送收据请求但没有得到任何回应。
我的查询是我是否需要在服务器上配置任何内容(或 ejabberd.cfg 文件中的任何更改)或任何我们需要做的客户端代码。
【问题讨论】:
不,XEP-0184 是纯粹的客户端协议,因此无需在服务器上设置任何内容。
您没有收到任何确认的原因可能有:
XEP-0184。根据您使用的 XMPP 库(在两个客户端 - 发送者和接收者上),发送者可能决定甚至不请求收据,如果它@ 987654321@(通过查询对等体的能力)它关闭了XEP-0184。
可能更清楚一点:XEP 通常建议实现检查 XEP 定义的功能是否受支持,如果不支持则不要尝试使用它。并非所有的库和客户端都这样做,但有些会这样做。这意味着一些实现可能是这样的:好的,我被要求发送交货回执请求,所以
XEP-0184。特定的 XMPP 库是否自己执行此操作取决于“智能”的制作方式。
如果XMPP Framework 是指this library,请尝试阅读其源代码以查看它是否“智能”并询问对等方的上限,然后检查XEP-0184 是否已启用。
还要检查您是否可以启用记录客户端交换的 XML 流的功能。检查它们是调试 XMPP 相关问题的最佳方式。
【讨论】:
您可以使用XEP-0022消息事件扩展来实现:
这里是你的消息节格式:
<message to='username@domain.com' id='msgId-21102012,12:12:11'>
<body>How are you doing?</body>
<x xmlns='jabber:x:event'>
<offline/>
<delivered/>
<composing/>
</x>
</message>
根据接收状态,开火将响应消息事件状态。一旦查看 XEP-022 扩展。
【讨论】:
XEP-0022 已过时(虽然对于某些服务器实现(如ejabberd)肯定有用,以获取有关消息存储在离线存储等中的通知)。