Algorithm 如何处理来自同一用户的不同xmpp优先级

Algorithm 如何处理来自同一用户的不同xmpp优先级,algorithm,xmpp,google-talk,Algorithm,Xmpp,Google Talk,我想确定Google Talk(又名gchat)联系人是否离开、可用、dnd或不可用(我认为这是gchat上唯一可用的类型) 到目前为止,我一直在使用sleekxmpp与gchat交互并读取xml等。。。问题是,联系人经常使用同一帐户登录多个资源(例如电话和计算机),每个资源都有自己的优先级和可用性。所以我想确定谁是“顶级达格”,我的意思是,我应该使用他们的哪些登录资源来确定他们的可用性 我认为这与优先级有很大关系,但我不能确切地确定,从我可以看出,两种资源如何具有相同的优先级和不同的可用性 我

我想确定Google Talk(又名gchat)联系人是否离开、可用、dnd或不可用(我认为这是gchat上唯一可用的类型)

到目前为止,我一直在使用sleekxmpp与gchat交互并读取xml等。。。问题是,联系人经常使用同一帐户登录多个资源(例如电话和计算机),每个资源都有自己的优先级和可用性。所以我想确定谁是“顶级达格”,我的意思是,我应该使用他们的哪些登录资源来确定他们的可用性

我认为这与优先级有很大关系,但我不能确切地确定,从我可以看出,两种资源如何具有相同的优先级和不同的可用性


我意识到,要找到他们“真正”的可用性并不是一个完美的解决方案,但我认为谷歌会根据任何算法决定在联系人旁边显示可用性图标的颜色,所以我也可以尝试解决这个问题。

好吧,如果所有显示为不可用的连接都不可用,那么它们就不会被视为不可用。如果它们拥有的任何连接显示它们可用,则它们在某些容量下可用。优先级与可用性无关


当消息发送到裸JID(无特定连接)时,服务器路由消息的优先级将发挥作用。如果用户有多个连接,服务器将把消息传递给优先级最高的连接。具有相同优先级的多个连接的行为可能会有所不同,具体取决于服务器及其配置。例如,我相信谷歌将提供给所有资源,而Openfire(默认情况下)将根据内部算法只提供给其中一种资源。根据规范,这两种行为都是有效的。

那么,只有当所有显示为不可用的连接时,它们才被视为不可用。如果它们拥有的任何连接显示它们可用,则它们在某些容量下可用。优先级与可用性无关


当消息发送到裸JID(无特定连接)时,服务器路由消息的优先级将发挥作用。如果用户有多个连接,服务器将把消息传递给优先级最高的连接。具有相同优先级的多个连接的行为可能会有所不同,具体取决于服务器及其配置。例如,我相信谷歌将提供给所有资源,而Openfire(默认情况下)将根据内部算法只提供给其中一种资源。根据规范,这两种行为都是有效的。

这完全取决于您,没有标准答案(一般来说,协议规范试图避免命令用户界面设计)

您可以在界面中单独显示每个连接,也可以尝试巧妙地合并它们。最终如何合并它们取决于您,但与Robin的答案(事实上是正确的)相反,我建议使用优先级,因为它反映了实际资源的状态,该资源将是用户发送给该联系人的任何消息的接收者

例如,如果联系人有一个优先级为5的资源“dnd”,而另一个资源是优先级为0的“远离”,则显示“dnd”是有意义的,即使“远离”是更“可用”的状态。这是因为当您向联系人的裸JID发送消息时,他们将接收到“dnd”资源

在优先级绑定的情况下(两个具有相同优先级的资源),您还有另一个选择要做。我建议对每种可能的状态加上权重,并显示“最可用的”。我会这样订购,例如:

  • 聊天室| dnd
  • (无-标准“可用”)
  • 远离
  • xa
  • 这仍然保留了“chat”和“dnd”的边缘情况。它们都是关于用户可用性的强有力的(但相互矛盾的)陈述(即“跟我说话!”和“走开!”),因此可能应该优先于其他人


    确实,如果联系人在“dnd”和“chat”中有两个具有相同优先级的资源,那么您就没有什么可以做的了,除了可能让最后接收到的状态优先-因为这通常表示他们最近活动的资源。

    这真的取决于您,没有标准答案(一般来说,协议规范试图避免指令用户界面设计)

    您可以在界面中单独显示每个连接,也可以尝试巧妙地合并它们。如何最终合并它们取决于您,但与Robin的答案相反(这是事实上正确的)我确实建议使用优先级,因为它反映了实际资源的状态,该资源将是用户发送给该联系人的任何消息的接收者

    例如,如果联系人有一个优先级为5的资源“dnd”,而另一个资源为优先级为0的“远离”,则显示“dnd”是有意义的,即使“远离”是更“可用”的状态。这是因为当您向联系人的裸JID发送消息时,他们会将其接收到“dnd”资源

    在优先级并列的情况下(两个资源具有相同的优先级),您还有另一个选择。我建议为每个可能的状态添加权重,并显示“最可用的”。我会这样排序,例如:

  • 聊天室| dnd
  • (无-标准“可用”)
  • 远离
  • xa
  • 这仍然保留了“chat”和“dnd”这两个边缘词。它们都是关于用户可用性的强烈(但相互冲突)声明(即“跟我说话!”和“走开!”),因此可能应该优先于其他声明

    真的吗?如果联系人在“dnd”和“chat”中有两个优先级相同的资源,那么你就没有那么多了