我想知道(官方)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
答案 0 :(得分: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.
答案 1 :(得分:1)
XEP-0280对此进行了定义。据我了解,它定义了当其中一个用户向其发送消息时通知来自同一用户的所有资源的机制。我的意思是,Alice / pda向Bob发送消息,因此Alice / mobile和Alice / PC将收到Alice / pda发送的消息副本。
希望它有所帮助。我目前正在寻找一个实现此功能的服务器,以及一个客户端库。如果没有,我将自己在jabberd2和gloox xmpp库中实现它。
干杯,