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

我最近发现,有一个非常相似的XMPP功能,称为Carbons。但是,在快速发现服务请求后,Google的服务器没有发布此功能。 XEP-0313和XEP-0136看起来也不错,但是服务器也不做广告。

可能相关的问题:Deliver Google Talk message to all logged in clients using XMPPPY

最佳答案

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

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

这是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.

10-08 09:14