如何在ejabbered/XMPP中获得发送/接收消息的确认?

Pur*_*tam 6 xmpp ejabberd

如何知道该消息是使用XMPP framework和传递给其他用户ejabberd,我们使用XEP-0184类消息传递收据,我们发送收据请求,同时发送消息,但没有得到任何响应.

我的查询应该是我需要在服务器上配置任何内容(或ejabberd.cfg文件中的任何更改),或者我们需要做的任何客户端代码.

kos*_*tix 5

不,XEP-0184是纯粹的客户端协议,因此无需在服务器上进行设置.

您没有收到任何承认的原因可能是:

  • 您的客户刚刚没有XEP-0184启用.
  • 根据您所使用的XMPP库(在这两个客户-发送者和接收者),发送者可以决定甚至没有要求发票,如果发现(通过查询对方的能力),它已XEP-0184关闭.

    可能更清楚:XEP通常建议实现检查是否支持XEP定义的功能,如果不支持则不尝试使用它.并非所有的库和客户都这样做,但有些人这样做.这意味着某些实现可能是这样的:好的,我被要求发送送达回执请求,所以

    1. 在我即将联系的同伴上进行服务发现.
    2. 检查是否已XEP-0184启用.
    3. 如果没有,我会默默地不附加任何收据请求.

    无论是一个特定的XMPP库做这本身取决于是如何"智能"制造.

如果XMPP Framework您的意思是这个库,请尝试阅读其源代码以查看它是否"智能"并询问对等方的大写字母,然后检查是否XEP-0184已启用.

还要检查是否可以启用客户端交换的XML流的日志记录.检查它们是调试XMPP相关问题的最佳方法.


Bhu*_*tre 2

您可以使用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>
Run Code Online (Sandbox Code Playgroud)

根据接收状态,开火将响应消息事件状态。一旦查看了 XEP-022 扩展。

  • “XEP-0022”已过时(虽然对于某些服务器实现(如“ejabberd”)肯定很有用,可以获取有关存储在离线存储等中的消息的通知)。 (2认同)