3

我想知道(官方)GTalk 客户端如何设法显示收到的所有消息 - 即使它最初是由另一个客户端使用的。例如:我在笔记本电脑上登录 gmail.com 上的 GTalk,同时通过我的 Android 设备上的官方 GTalk 应用程序登录。一位朋友给我发了一条消息,该消息同时显示在gmail.com客户端和 Android 客户端上。(我认为它最初只转发给任一客户端,但第二个客户端稍后获取消息)

我最近发现有一个非常相似的 XMPP 功能,称为Carbons。然而,在一个快速的服务发现请求之后,谷歌的服务器并没有宣传这个功能。XEP-0313 和 XEP-0136 看起来也不错,但服务器也不宣传它们。

可能相关的问题:使用 XMPPPY 向所有登录的客户端发送 Google Talk 消息

4

2 回答 2

2

当您发起新的聊天时,您应该将第一条消息发送给用户裸 Jid。这是大多数客户正在做的事情。当 GTalk 服务器将聊天消息检索到裸 Jid 时,它会将消息路由到所有可用资源。对于此对话中的所有后续消息,客户端通常会选择资源并将它们发送给完整的 Jids。那时不应复制这些消息。

许多其他服务器不会将消息路由到所有资源的裸 Jid,而是路由到最可用的资源,即具有最高优先级的客户端。

这是 RFC 的引用:

If there is more than one resource with a non-negative presence priority then the
server MUST either
(a) deliver the message to the "most available" resource or
resources (according to the server's implementation-specific algorithm, e.g., treating
the resource or resources with the highest presence priority as "most available") or
(b) deliver the message to all of the non-negative resources. 
于 2013-02-12T09:52:11.737 回答
1

XEP-0280 定义了这一点。据我了解,它定义了当其中一个用户向任何人发送消息时通知来自同一用户的所有资源的机制。我的意思是,Alice/pda 向 Bob 发送消息,因此 Alice/mobile 和 Alice/PC 将收到 Alice/pda 发送的消息的副本。

希望能帮助到你。我目前正在寻找实现此功能的服务器以及客户端库。如果没有,我将在 jabberd2 和 gloox xmpp 库中自己实现它。

干杯,

于 2013-07-04T13:28:56.453 回答