XMPP添加好友相关文章一篇

2023-05-16

http://jingyan.info/xmpp%E6%B7%BB%E5%8A%A0%E5%A5%BD%E5%8F%8B%E7%9B%B8%E5%85%B3%E6%96%87%E7%AB%A0%E4%B8%80%E7%AF%87/


[xmpp][添加好友]rfc3921中presence和roster集成的一点思考


[xmpp][添加好友]rfc3921中presence和roster集成的一点思考
Jabber(XMPP)中文翻译计划

http://wiki.jabbercn.org/space/start/2007-05-03/1
————————————————–

[ 开始 | 索引 | 登录 或 注册 | 忘记密码 ]
start > 2007-05-03 > 1
2007-05-03 #1
由how创建。最后一次被how修改,在1年1天之前。 被访问了 459 次。 #1
[编辑] [rdf]
标签
附件
rfc3921中presence和roster集成的一点思考
最近发现psi的添加联系人功能和别的客户端软件有一点小小不同, 也暴露出RFC3921中presence和roster集成中兼容性的一点小问题.

假定 user@jabbercn.org 使用 psi , 而 contact@rooyee.biz 使用 rooyee messenger ,情形如下:

1. contact@rooyee.biz 向 user@jabbercn.org 发出添加好友的请求

<iq id="rosterset1" type="set">

<query xmlns="jabber:iq:roster">

<item jid="user@jabbercn.org" name="user"/>

</query>

</iq>

<presence from="contact@rooyee.biz" to="user@jabbercn.org" type="subscribe"/>

2. user@jabbercn.org 向 contact@rooyee.biz 发出添加好友请求(也就是请求对方加自己为好友)

<presence from="user@jabbercn.org" to="contact@rooyee.biz" type="subscribe"/>

3. user@jabbercn.org 同意成为 contact@rooyee.biz 的好友(也就是批准对方添加自己)

<presence from="user@jabbercn.org" to="contact@rooyee.biz" type="subscribed"/>

4. contact@rooyee.biz 同意 成为user@jabbercn.org 的好友(也就是批准对方添加自己)

<presence from="contact@rooyee.biz" to="user@jabbercn.org" type="subscribed"/>

在RFC3921第八章:名册条目和出席信息订阅的集成中规定, 正常的用户之间的相互订阅中,本方接收到对方请求之后,首先要做的是批准对方请求,然后才是向对方提出订阅请求, 而在上述例子中,psi客户端(也就是用户user@jabbercb.org)是把这两步颠倒过来的(第二步和第三步).

现在兼容性的问题就来了, jabberd2服务器是严格按照RFC3921第八章:名册条目和出席信息订阅的集成来实现的,使用psi的user@jabbercn.org在批准contact@rooyee.biz之前就向对方请求订阅,导致最后user@jabbercn.org的状态是From,而contact@rooyee.biz状态则为Both, 也就是说 user@jabbercn.org 无法正常完成添加好友功能.

然后我们再来看看RFC3921第九章订阅状态中规定, 如果单从订阅状态考虑, 那么psi的处理方式并非那么无理. 我们看看每一步动作之后双方的状态改变情况(以下每一步的状态对应前述例子的每一步):

1. user@jabbercn.org : None + Pending In

contact@rooyee.biz : None + Pending Out

2. user@jabbercn.org : None + Pending In/Out

contact@rooyee.biz : None + Pending Out/In

3. user@jabbercn.org : From + Pending Out

contact@rooyee.biz : To + Pending In

4. user@jabbercn.org : Both

contact@rooyee.biz : Both

openfire中就是这样单纯按订阅状态处理的, 所以psi客户端和openfire服务器配合的时候可以正常地添加好友.

接下来我们再看RFC3921第六章的管理订阅和RFC3921第七章的名册管理, 如果不考虑集成的问题, 把相互加好友变成你加我加上我加你,那么就需要把前述的例子的第二步改成如下

2. user@jabbercn.org向contact@rooyee.biz发出添加好友请求(也就是请求对方加自己为好友)

<iq id="rosterset2" type="set">

<query xmlns="jabber:iq:roster">

<item jid="contact@rooyee.biz" name="contact"/>

</query>

</iq>

<presence from="user@jabbercn.org" to="contact@rooyee.biz" type="subscribe"/>

pandion客户端就是采用这个处理方式, 它和目前的服务器都可以很好地兼容.

综上所述, RFC3921的第六章第七章是把出席信息订阅和名册管理分开考虑的, 因为在XMPP中是允许存在独立的出席信息应用的,所以从逻辑上来讲它们是独立的, 第八章则考虑到了它们的集成,这是大部分XMPP应用中的典型需求, 第九章基于订阅状态处理的规则对于第八章的优化, 它侧重于使得服务器实现更加简单和易于兼容.


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XMPP添加好友相关文章一篇 的相关文章

  • 如何在XMPP(Openfire)中删除群聊消息?

    我想从 openfire 历史记录中删除单个群聊消息 是否可以 历史记录不保存在 OfMessageArchive 表中 删除应用程序中的消息后 该消息消失 但重新登录后从 Openfire 的 基础 下载 它仍然可见 到目前为止 您还无法
  • 使用 OAuth 2.0 通过 SMACK Java 库进行 X-FACEBOOK-PLATFORM 身份验证

    第一次在这里发帖 所以请温柔 我正在使用 Smack 库构建一个 Facebook 聊天客户端 我正在使用 X FACEBOOK PLATFORM 方法 以免保存任何密码 我使用 oauth 1 0 使其正常工作 并想将其更改为 2 0 这
  • 使用XMPP或WebSocket,为什么用户之间的实时通信需要服务器?

    在底层 都是关于套接字通信的 如果有某种方法可以获取两个用户的IP 为什么不能直接在用户之间建立连接 而必须通过中间的服务器 我的2分钱 没有人强迫我们拥有基于服务器的实时通信模型 事实上 XMPP 有一个扩展名为 无服务器消息传递 htt
  • PHP 聊天机器人:Google Talk

    我想知道如何通过特殊客户端为 Google Talk 创建聊天机器人 我知道它使用XMPP发送消息 但我根本不知道如何使用它 据我了解 如果我要创建自己的客户端页面 我应该能够创建一个机器人 当我离开时它会为我聊天 该页面将使用我的数据解析
  • XMPP Bosh 与 SignalR

    XMPP相对于SignalR有更多优势吗 它们都使用 http 长轮询机制 我无法决定是否应该使用 XMPP 作为我的聊天应用程序 还是应该使用 SignalR 并将所有内容保留在我的 IIS 服务器上 SignalR 使用多种传输方式 请
  • 使用 strope js 基于 Javascript 的 XMPP 聊天客户端 - 示例和教程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想制作一个简单的基于 javascript 的 XMPP 客户端 我偶然发现了 strope js
  • 使用 Node js 将下游消息发送到 google ccs

    我在用节点xmpp https github com node xmpp node xmpp连接到 google gcm ccs 服务器 我跟着连接 现在 每当我收到来自我的 redis 订阅者的消息时 我需要发送一条下游消息 我订阅了一个
  • 使用 EC2(Amazon Web Services)自动 Ejabberd 集群[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Using Ejabberd http www process one net en ejabberd in EC2 http aws amazon
  • 当我尝试连接到服务器时出现“远程服务器超时”异常

    尝试连接时openfire服务器通过以下代码 Connection connection new XMPPConnection https 192 168 0 101 5222 connection connect 我收到一个异常 上面写着
  • 如何实现XMPP发送推送通知

    我想使用 XMPP 以便我的应用程序能够向 Android 手机 1 5 及更高版本 发送更新 我非常想使用 XMPP 向手机发送推送通知 我将如何实现这一目标 目前 我的 Web 应用程序正在 apache tomact 上运行 带有许多
  • 我在 ejabberd (17.07) 上的 Android 设备上尝试使用 smack api(4.2) 注册用户时遇到错误

    我试图找出错误的原因 但找不到 如果有人可以提出一种方法 我们将不胜感激 早些时候我使用的是带有默认 mnesia 的 ejabberd 2 1 版本 运行良好 我能够从 Android 应用程序注册用户 但是现在当我用mysql安装新的e
  • 运行自定义 XMPP 服务器应用程序有多容易?

    参考这个问题 https stackoverflow com questions 2904163 what do i need to know before working on an im application XMPP 被认为是 IM
  • 在 Android 4+ 中使用 Android TrustStore for aSmack (ICS)

    我不是密钥库方面的专家 并且很难理解其中的细微差别 但这就是我所取得的进展 在使用 asmack 构建创建 xmpp 连接时发现here https github com Flowdalic asmack人们仍然需要更改信任库 通常可以说是
  • 在 XMPP 中交换自定义 XML 元素的最佳方式?

    我有一个 XMPP 应用程序 其中两个客户端进行交互 1 一个机器人编程Smack http www igniterealtime org projects smack Scala Java 和 2 一个 GUI 聊天客户端strophe
  • 使用 smack 库在 JAVA 中实现 GCM CCS (XMPP)。与 gcm.googleapis.com 连接失败

    我正在尝试使用 GCM 在 android 客户端和 java 中的服务器应用程序之间进行通信 我正在使用基于 XMPP 的 GCM 因为我需要异步 双向消息 在我的客户端 1 Google Play 服务检查显示需要更新 google p
  • 如何在后台保持 iphone ios xmpp 连接处于活动状态?

    iPhone 的 XMPPFramework 功能强大 我已经启动并运行了它 但是如何在后台保持连接 10 分钟以上 我希望获得更多有关如何实现此目标的文档 操作方法 因此 用例非常简单且常见 Joe 在线并且正在使用 iPhone 聊天应
  • Java 和 Jabber/Smack [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试使用最新版本的 Smack 3 2 1 编写一个简单的示例 以便在两个帐户之间发送和接收消息 Connection connec
  • 如何使用 Smack 通过 XMPP 设置/获取配置文件数据

    我正在 Android 上使用 Smack 库开发 XMPP 客户端 花名册 消息 状态等内容运行得很好 然而 我没有找到一种方法来存储额外的个人资料信息 用户图片 狗的名字 我从谷歌搜索中看到的唯一方法是使用 VCard 但它根本不起作用
  • 如何在smack中设置我的名字?

    我可以使用 connection getRoster getName 来获取联系人的名册名称 但如何set当前经过身份验证的帐户的名称 使用不同的帐户登录 说真的 你的帐户名与你的身份验证绑定在一起 没有办法强迫对方为你使用特定的昵称 但如
  • 如何在 Android 的这个特定用例中实现 MQTT?

    我的用例 登录到我的应用程序的用户应该能够向在另一台 Android 设备上登录到该应用程序的自己发送消息 如果用户拥有多个设备 那么一旦他打开该消息 其他设备上的通知必然会消失 Doubts 如何跨设备向特定用户发送数据 我了解如何使用

随机推荐