【问题标题】:How to get acknowledgment for send/receive message in ejabbered/XMPP?如何在 ejabberd/XMPP 中获得发送/接收消息的确认?
【发布时间】:2014-01-05 00:35:30
【问题描述】:

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

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

【问题讨论】:

    标签: xmpp ejabberd


    【解决方案1】:

    不,XEP-0184 是纯粹的客户端协议,因此无需在服务器上设置任何内容。

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

    • 您的客户只是没有启用XEP-0184。
    • 根据您使用的 XMPP 库(在两个客户端 - 发送者和接收者上),发送者可能决定甚至不请求收据,如果它@ 987654321@(通过查询对等体的能力)它关闭了XEP-0184。

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

      1. 在我将要联系的对等方上进行服务发现。
      2. 检查是否启用了XEP-0184。
      3. 如果没有,我会默默地不附上任何收据请求。

      特定的 XMPP 库是否自己执行此操作取决于“智能”的制作方式。

    如果XMPP Framework 是指this library,请尝试阅读其源代码以查看它是否“智能”并询问对等方的上限,然后检查XEP-0184 是否已启用。

    还要检查您是否可以启用记录客户端交换的 XML 流的功能。检查它们是调试 XMPP 相关问题的最佳方式。

    【讨论】:

      【解决方案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>
      

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

      【讨论】:

      • XEP-0022 已过时(虽然对于某些服务器实现(如ejabberd)肯定有用,以获取有关消息存储在离线存储等中的通知)。
      • @kostix 我正在使用 ejabberd 服务器,所以 XEP-0022 可以使用它吗?如果您有任何与 XEP-0022 Objective-c 版本相关的链接,请提供给我们
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2016-02-28
      相关资源
      最近更新 更多