首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XMPP Smack Chat应用中的多设备支持

XMPP Smack Chat应用中的多设备支持
EN

Stack Overflow用户
提问于 2015-07-20 11:16:28
回答 3查看 1.2K关注 0票数 2

我正在开发Android聊天应用程序。

我的要求是向多个设备传递消息。

考虑两个用户(用户A和用户B)之间的这种情况:

代码语言:javascript
运行
复制
User A logs in and sends message to User B.
User B logs in from Device 1 and receives message from User A.
User B logs in from Device 2 but does not get message from User A.

根据我的要求,用户B也应该从设备2中的用户A获得消息。

我怎样才能做到这一点?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2015-07-20 13:04:29

在XMPP中,消息只能一次性传递:

  • 对于共享最高优先级的在线资源,
  • 通过脱机消息传递连接到第一个客户端。

但是,如果您希望其他客户端重新同步,则应该依赖XEP-0313:消息存档管理。此规范描述了客户端如何访问消息历史记录并重新同步其状态。

例如,您可以使用查询给定时间后的所有消息存档。这将允许连接的客户端获取自上次联机以来错过的所有消息:

代码语言:javascript
运行
复制
<iq type='set' id='juliet1'>
  <query xmlns='urn:xmpp:mam:0'>
    <x xmlns='jabber:x:data'>
      <field var='FORM_TYPE'>
        <value>urn:xmpp:mam:0</value>
      </field>
      <field var='start'>
        <value>2010-08-07T00:00:00Z</value>
      </field>
    </x>
  </query>
</iq>
票数 1
EN

Stack Overflow用户

发布于 2015-07-21 19:23:30

除了Mickael的回答,你应该知道一些事情。如果指定一个完整的JID作为要处理的地址,则该消息将仅传递到该单个端点。

只有在下列情况下才会为同一用户传递消息到多个资源

  • 要地址是空的JID
  • 所有连接都有相同的优先级。
  • 服务器被配置为传送到多个端点。

最后一点至关重要。根据规范,服务器可以通过两种方式处理发送到裸JID的消息。

  • 发送到具有最高优先级的连接之一。哪一个是由服务器决定的,它可以是第一个连接的,也可以是最后一个连接,或者是一个随机的选择,如果有多个具有相同优先级的连接。
  • 向所有具有最高优先级的连接发送。

因此,除非您知道您的服务器支持并配置为允许第二种选择,否则无论如何您都无法完成您想要做的事情。

票数 0
EN

Stack Overflow用户

发布于 2018-08-23 05:44:56

为了参与即时消息传递和存在活动,客户端(即设备)应该在服务器上建立会话。

XMPP文档中所示

如果已经有同名的活动资源,服务器必须(1)终止活动资源并允许新请求的会话,或者(2)不允许新请求的会话并维护活动资源。这些服务器中的哪一个取决于实现,尽管建议实现case #1。在案例1中,服务器应该向活动资源发送流错误,终止XML流和活动资源的底层TCP连接,并向新请求的会话返回类型为“resource”(表示成功)的IQ节。在第二种情况下,服务器应该向新请求的会话发送一个节错误,但是维护该连接的XML流,以便新请求的会话在发送另一个会话请求之前有机会协商一个不冲突的资源标识符。

(https://www.rfc-editor.org/rfc/rfc6120#section-7.7.2.2)

因此,您应该根据应用程序的要求,首先决定处理会话的方式。现在,由于您使用的是Ejabberd,所以可以通过定义选项资源来配置它。

但是,如果仍然希望使用多个会话,则可以使用Management XEP-0313

这样您就可以在服务器上存储聊天历史记录,然后检索。这可以通过使用选项国防部在ejabberd中进行配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31515088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档