xmpp最近联系人列表删除怎么告诉xmpp连接服务器器

君,已阅读到文档的结尾了呢~~
基于XMPP协议即时通讯系统设计与实现IM,实现,系统,设计与实现,IM系统,与实现,即时通讯,即时通信,设计基于,设计和
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于XMPP协议即时通讯系统设计与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口XMPP入门 - 推酷
本人原创,更多xmpp知识、ios知识、其他分享知识见:
1、XMPP是可扩展消息与存在协议,主要用于im。
2、他是一种类似于http协议的数据传输协议,过程如:“解包装—&包装”过程。
3、在XMPP中,有三个角色:客户端,服务器,网关。 &在三者之间可以进行任意两两通信。服务器承担客户端信息记录,连接管理和信息的路由功能。网关承担与异构即时通信系统的互联互通。
4、XMPP的基本网络形式是单客户端通过TCP/IP连接到单服务器,然后传输XML。
5、他是基于C/S结构的,分布式网络,使用xml的数据格式。
6、XMPP的核心部分是由他的节构成的。
7、xmpp网络:服务器,客户端,组件,插件。
8、xmpp的jid与电子邮件地址类似。节点、域、资源。
9、xmpp主词汇表有3种节:&message&(用于在实体间交换“发后不管”消息)&presence&(传达出席状态变化并用来操纵出息订阅)&iq&(提供类似http的get和post操作的请求响应语义。).
10、xmpp会话:连接、流的建立、身份验证、会话正文、断开连接。
基本工作原理:
从一个client到另一个client的jabber消息和数据都要通过xmpp server。
1.client连接到server。
2.server 利用本地目录系统的证书对其认证。
3.client制定目标地址,让server告知目标状态。
4.server查找,链接并进行相互认证。
5.client间进行交互。
核心节:&message&&presene&&iq&
1、&stream& &xmpp以其标记开始。
2、&presence&用来表明用户状态。可以来广播或“发布-订阅”;&status&网络状态、&show&可用状态、&priority&资源优先级。
3、&iq&一种请求/响应机制。
4、&message&用于两个jabber用户发送消息。&body&是消息内容;他包含&subject/&(消息标题)&body/&(消息内容)&thread/&(跟踪会话线索)子标签。
简单会话:
&stream:stream& & &创建一个xmpp流
&iq type=’get’& & &请求elizabeth的花名册,也就是她的所有已存储的联系人列表。
&query xmlns=’jabber:iq:roster’/&
&presence/& & & & & & & 通知服务器她已经在线并可以访问。 &当他注意到darcy在线的时候,就会发个message节,
to=’darcy@pemberley.lib’
from=’ellizabaeth@longbourn.lit/ballroom’
type=’chat’&
&body&sdf&/body&
&/message&
&presence type=’unavailable’/& &告诉服务器,这是不可访问的要关闭
&/stream:stream&
支持通用属性:from,to,type,id。
识别此节的起始jid。这里不建议在输出的节上手工设置from属性,服务器会在这些节通过时添加正确的from属性,而如果错误地设置from属性会导致服务器拒绝整个节。
客户端-服务器中,接收到的节上没有from属性,意味着该节来源于服务器自身,而在服务器-服务器中,缺少from被视为是错误。
把xml节发送到to属性指定的jid。他和from相似。
客户端-服务器流中没有to属性,那么服务器将假设它是有意发给服务器自身的消息,建议在向服务器自身发消息时忽略to。
如果to属性中指定的jid是一个用户,那么服务器有可能代表用户来处理该节。
如果目的地是一个裸jid,那么服务器将处理这个节。
如果目的地是一个完整的jid,那么服务器将直接把该节路由到该用户。
这个属性指定了三个节的具体类型。
三个节都可以把type设置为error,表示这个节是对已接收到的同一类型的节的错误影响,不要响应类型为error的节,避免在网络上出线反馈环节。
给节指定id来辅助识别响应。对于iq节,id是必须的,但是对于其他的节id是可选的。如果某个节是为了响应一个携带id属性的节而产生的,那么这个应答必须包含携带相同值得id值。
id必须具有唯一性,这样节的发送者就可以使用它来甄别响应了。最简单的做法就是让id属性值在给定的流中保持唯一性,以免歧义。
在message和presence节的应答节一般仅限于报告错误,iq的应答节可以用来通知成功操作、确认命令或返回请求的数据。无论如何客户端都可以使用应答节的id属性来识别与该节相关联的请求节。 & 在短时间内发送大量同类型的节,此时这个功能就非常关键了。因为这些节的应答可能会以乱序形式到达。
1)、presence
他控制并报告实体的可访问性。(包括:在线,离线; &离开,请勿打扰等。 &) 他还可以用来建立和终止向其他实体发布出席订阅。
有了出席订阅通知,我们在即时通信系统中就可以在发送消息之前知道接收者是否在线。
(1)、普通的presence
此时他是不包含type属性的,如果有的话他的属性值为unavailable活着error。 &在这里,type属性是没有available值得,因为我们可以通过缺省的type来设定。
用户可以通过发送不携带to属性,并直接发往服务器的presence节来操纵出席状态。如下:
&presence/& & & &前两个节将用户的出息状态设置为在线和离线
&presence type=‘unavailable’/& & 离线
&presence&
&show&away&/show& & & &只能用在presence中,值away离开,chat聊天,end不希望被打扰,xa长期离开, &传达用户可访问性的性质,它请求接收者的客户端使用这个消息来更新发送者出息状态的可视化指示器。
&status&sf&/status& & 一个人们可读的字符串,用户可以将其设置为能够传达出席信息的任何值。 &聊天时,接收者的客户端中这个字符串一般紧挨着联系人名字显示。
&/presence&
&presence&
&status&sfdf&/status&
&priority&22&/priority& & &优先级 &同时具有多个回话的用户可以使用优先级来指出哪一个资源应该接收到那些发往该用户裸jid的聊天消息。
&/presence&
&presence&
&prioriry&11&/pritority&
&/presence&
(2)、扩展presence
比如将你正在听歌,心情等信息广播给其他联系人。这里用流量较大。
(3)、出席订阅
server会自动将出席信息广播给联系人,用户也会从所有他已经进行出席订阅的联系人那里接收到出席的状态更新。
对于好友状态的订阅:A订阅了B得出席信息,这里并不是说B也订阅了A得出席信息。
订阅状态:subscribe(建立订阅),unsubscribe(取消订阅),subscribed(应答建立),unsubscribed(应答取消)。
&presence from=‘a@longbourn.lit/outside’ to=‘b@pemberley.lit’ type=‘subscribe’/&
&presence from=‘b@pemberley.lit/library’ to=‘a@longbourn.lit/outside’ type=‘subscribed’/&
&presence from=‘b@pemberley.lit/library’ to=‘a@longbourn.lit’ type=‘subscribe’/&
&presence from=‘a@longbourn.lit/outside’ to=‘b@pemberley.lit/library’ type=‘subscribed’/&
(4)、定向出席
他是一种直接发给另一个用户或其他某个实体的普通presence节。这里可以用来向那些没有进行出席订阅的实体传送出席状态信息。也就是临时出席。
这里当发送者变成不可访问的状态的时候,出席信息的接收者将会自动得到通知,即使发送者忘记显示的通知接收者。这里可以使用定向出席来临时地掌握某个用户的可访问性。
2)、message
从一端到另一端发送消息。这个节属于发出后不再过问,可靠性不能保证。一旦消息发出去了,发送者就不会知道他是不是传送出去了,也不会知道到达的时间。
message示例:
&message from=‘a@netherfield.lit/frawing_room’ to=‘b@pemberley.lit’ type=‘chat’&
&body&adf&/body&
&/message&
benlent夫人向聊天室bennets@chat.merython.lit发送消息,bennet接收消息
&message from=’bennets@chat.merython.lit/mrs.bennet’ to=‘mr.bennet@longbourn.lit/study’ type=‘groupchat’&
&body&df&/body&
&/message&
(1)、消息类型
type指出:chat(一对一聊天),error,normal,group chat(多人聊天),headline(不支持或者不方便应答的自动化服务使用)。
type是可以省略的,默认为normal,但是我们应该提供一个type值,
(2)、消息内容
&body&元素包含着该消息中人们的可读的内容。只要有不同的xml:lang属性就可以使用多个&body&。
&thread&元素用来创建线索,他的内容是一个用来区分不同线索的唯一标识符。应答节应该包含与所应答的节相同的&thread&元素。 (线索:向电子邮件一样)
在消息中,可以使用XHTML-IM来给消息提供格式化,超链接,以及富媒体。也可以使用Chat State Notifications来允许用户通告对方自己正在撰写消息或有空。(qq的正在输入)
这个节表示的时info/query(信息与查询),他给xmpp童心提供请求和响应机制。和http的基本工作原理想死,允许获取和设置查询。(get 和 post)
每个节都需要有一个响应,但是这个节的必须的id将用来把响应与导致该响应的请求关联起来。
type:get,set请求节; result,error为响应节。
下面看示例,每个iq节必须匹配id属性
a向服务器发送了一个格式错误的花名册请求
&iq from=a@longbourn.lit/garden’ type=‘get’ id=‘roster1’&
&query cmlns=‘jabber:iq:roster’/&
&iq to=‘a@longbourn.lit/garden’ type=‘error’ id=‘roster1’&
&query xmlns=‘jabber:iq:roster’/&
&error type=‘cancel’&
&feature-not-implemented xmlns=‘urn:ietf:params:xml:ns:xmpp-stanzas’/&
&iq from=a@longbourn.lit/garden’ type=‘get’ id=‘roster2’&
&query cmlns=‘jabber:iq:roster’/&
&iq to=‘a@longbourn.lit/garden’ type=‘result’ id=‘roster2’&
&query xmlns=‘jabber:iq:roster’&
&item jid=‘b@longbourn.lit’ name=‘b’/&
&item jid=‘c@netherfield.lit’ name=‘c’/&
a将b添加到花名册,回复空白iq来应答成功。
&iq from=‘a@longbourn.lit/garden’ type=‘set’ id=‘roster3’&
&query xmlns=‘jabber:iq:roster’&
&item jid=“b@pemberley.lit’ name=‘b’/&
&iq to=‘a@longbourn.lit/garden’ type=‘result’ id=‘roster3’/&
在错误提示节中,必须将type设置为error,并且需要携带一个&error&子元素。
在error中,他的type类型为:cancel(不应该重试),continue(警告信息),modify(发送的数据需要一些修改才可以被接受),auth(通知实体在以某种方式进行身份验证之后重试),wait(报告server临时遇到问题,稍后重发)。
在&error&中,必须包含一个错误条件作为他的子元素,也可以在&error&元素的子元素中指定应用程序的特定错误条件。还可以包含一个&text&元素来进一步指出有关该错误的详细信息。
要注意的是每个错误条件元素都必须位于urn:ietf:params:xml:ns:xmpp-stanzas命名空间里。
&error type=‘cancel’&
&not-allowed xmlns=‘urn:ietf:params:xml:ns:xmpp-stanzas’/& &这里指出了一般性故障
&closed-node xmlns=‘http:/jabber.org/protocol/pubsub#errors’/& &给出了请缺德应用程序错误提示信息
&text xmlns=‘urn:ietf:params:xml:ns:xmpp-stanzas&dfs&/text& & 包含了问题描述
XMPP寻址:
xmpp网络有一个或多个地址jid,
a@aaa.llit
& &组成:节点、域、资源(带有资源的jid是完整jid,没有资源的jid是裸jid),其中节点和资源是可选的,域是必选的。
其中域是服务器等的可解析dns名称。只有域组成的jid是有效的地址,表示服务器的地址。
其中指向域的节将由服务器自身处理,并且可能被路由到其他的组件或者插件上。
在本地时我们通常会识别域中的一个特定的用户,它位于@之前,本地部分还可以用来识别其他对象,多人聊天服务将每个聊天室显示为一个jid,节点部分指向聊天室。
jid的资源部分会标识一个特定的客户端xmpp链接,对于xmpp客户端来说,每个链接均被指派一个资源,如 用 &&
a@aaa.lit/study和a@aaa.lit/library
& 来寻址,其中资源部分也可以用来识别其他对象,在多人聊天时,jid的资源被用来识别聊天室中的一个特定的用户。
客户端处理裸jid的时候,服务器自己将处理发往客户端裸jid的节。如:一条发往某个客户端的裸jid的消息将被转发到该用户的一个或多个已连接资源,如果该用户离线,那么就将该消息存储以后传送。但是发给完整jid的节通常会直接路由到该资源所在的客户端连接。可以将裸jid视为寻址用户的账户,而不是寻址该用户的某个已连接的客户端。
xmpp连接:
连接,流的建立,身份验证以及断开连接。
发送节前要建立xmpp流,在流存在之前要建立通往xmpp服务器的连接。
客户端和服务器利用域名系统将服务器的域名解析成一个能够连接的地址。电子邮件服务特别的使用邮件交换台记录来提供处理特定域邮件的服务器列表。这样一个知名服务器地址就不用处理每一项服务请求了。电子邮件在dns中有特殊的对待。现在服务记录srv可用来为任意服务提供类似的功能。
当xmpp客户端或服务器连接到另一个xmpp服务器的时候,首先要在服务器域中查询适当的srv记录。查询应答中可能包含多条srv记录,这样就可以在多台服务器间建立负载均衡链接。
当没有找到合适的srv记录的时候,应用程序试着直接连接到给定域。大多数库也可以显式制定要连接的服务器。
2).流的建立
向服务器发送起始元素&stream:stream&,就可以打开xmpp流。服务器通过发送响应流的起始标记&stream:stream&进行响应。
服务器先发送&stream:features&元素,详细列举xmpp流中支持的所有功能。这些功能大多数与可用的加密和身份验证选项有关。
客户端发给服务器
&?xml version=’1.0′?&
&stream:stream xmlns=’jabber:client’
xmlns:straem=’http://ethrx.jabber.org/streams’
version=’1.0′
to=’pemberley.lit’&
服务器应答
&?xml version=’1.0′?&
&stream:stream xmlns=’jabber:client’
xmlns:stream=’http://etherx.jabber.org/streams’
version=’1.0′
from=’pemberley.lit’
id=’dddd’
xml:lang=’en’&
&stream:features&
&stream:freatures&
&starttls xmlns=’urn:ietf:params:xml:ns:xmpp-tls’/&
&compression xmlns=’http://jabber.org/features/compress’&
&method&zlib&/method&
&/compression&
&mechanisms xmlns=’urn:ietf:params:xml:ns:xmpp-sasl’& & & & & & & & & & & &mechanism&DIGEST-MD5&/mechanism&
&mechanism&PLAIN&/mechanism&
&/mechanisms&
&/stream:features&
根据数据交换信息指导pemberley.org服务器支持TLS,流压缩zlib等。
在两台服务器间建立xmpp流的过程相同,但是 jabber:client换成 jabber:server才可以。
3).身份验证
xmpp可以进行tls传输层安全加密,并且大多数客户端默认使用。服务器支持tls加密后,客户端就会启动tls链接,并将当前套接字升级为一个加密套接字。创建一对新的xmpp流。
xmpp身份验证使用sasl 简单身份验证与安全层协议,并支持多种身份验证机制。服务器通提供明文验证和基于md5摘要的验证,但是某些服务器还支持通过kerberos或特殊令牌来验证。
完成身份验证后,客户端必选为该链接绑定一个资源并启动一个会话。如果用户正在线路上查看xmpp流量,就会看到&bind&&session&元素被发送出去。(在&iq&中) &如果客户端没有提供绑定的资源,那么服务器将为其选定一个。
当两台服务器相互连接的时候,服务器交换并验证tls证书,或者接受服务器使用某种回拨协议通过dns来验证发送者身份。
4).连接断开
当用户结束xmpp会话的时候,他们终止会话并断开连接。最有礼貌的终止会话的方式是:先发送无效出席信息,然后关闭&stream:stream&元素。
通过发送最后的无效出席信息,用户的联系人能够得知该用户离开的原因。
&presence type=’unavailable’/&
&/stream:stream&
然后,服务器终止发往客户端的流。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致xmpp协议详解一:xmpp基本概念 - 简书
下载简书移动应用
写了35833字,被74人关注,获得了63个喜欢
xmpp协议详解一:xmpp基本概念
XMPP是一个开放式的XML协议,设计用于准实时消息和出席信息以及请求-响应服务。
通用的架构
通常采用客户端服务器架构进行实现,其中客户端通过TCP方式使用XMPP访问服务器,服务器之间也采用TCP方式进行通信。
xmpp通用架构
充当xmpp通信的一个智能抽象层,负责
对受验证的客户端,服务器以及其他实体之间以xml流的形式的连接和会话进行管理。
在这些实体间使用xml流对合理编址的xml节进行路由
存储和处理客户端使用的数据
通过TCP连接直接连接到服务器,并通过xmpp获得由服务器以及联合服务器所提供的全部功能。多个不同的客户端可以同时登陆并且并发的连接到一个服务器,每个不同资源的客户端通过xmpp地址的资源标识符来区分。建议的客户端和服务器连接的端口时5222
网关是一个特殊用途的服务器端的服务,主要功能是把xmpp翻译成外部消息系统,并把返回的消息翻译成xmpp.
每个服务器都是由一个网络地址来标识的并且服务器之间的通信是客户-服务器协议的直接拓展。任意两个服务器之间的通信是可选的,如果被激活,那么这种通信应该通过XML流绑定到TCP连接上进行。建议的服务器和服务器连接的端口时5269
xmpp系统涉及更多的域间连接,当你给不在同一个域中的联系人发送xmpp消息时,你的客户端连接到你的“家用”服务器,然后直接连接到你的联系人的服务器,而没有中间跳过。
因为xmpp通讯实在网络上,所以每个xmpp实体都需要一个地址,称为JabberID(JID)。一个合法的JID包括一组排列好的元素,包括域名(domain identifier), 节点名(node identifier), 和资源名(resource identifier)。这种结构,最常用来标识一个即时消息用户,这个用户所连接的服务器,以及这个用户用于连接对资源。一个JID的每一个合法部分的长度不能超过1023字节,也就是整体长度(包括@和/)不能超过3071.
节点类型不一定是客户端,比如:聊天室中 这里的room是聊天室的名字,service是多用户聊天服务的主机名,而加入了这个聊天室的某个特定的用户多地址则是
域名是一个主要的ID,并且是JID中唯一必须的元素。(一个纯粹的域名也是一个合法的JID)。它通常代表网络的网关或者“主”服务器,其他实体通过连接它来实现xml转发和数据管理功能。然而,由一个域名标识引用的实体,并非总是一个服务器,也可能是一个服务器子域名地址。
是一个可选的第二ID,放在域名之前并用符号“@”分开。它通常表示一个向服务器或网关请求和使用网络服务的实体(比如一个客户端),当然也可能表示其他实体(如聊天室中的一个房间)。33资源名是一个可选的第三ID,它放在域名后面并由“/”分开,资源名可以跟在后面也可以跟在&domain&后面。它通常表示一个特定的会话连接,或者附属于某个节点ID实体相关实体的对象。
XMPP本质上是一种XML流技术。客户端开始和XMPP服务器会话,会打开一个长时间的TCP连接,然后和服务器协商一个流。一旦你和你的服务器建立了一个XML流,你和你的服务器可以通过流交换三个特殊的XML片段:&message/&,&presence/&,&iq/&.这些片段称为XML节。是XML中最有意义的基本单元,而且一旦你已建立一个XML流,你可以通过流发送无数个节。举例:
&stream:stream&
&presence/&
&iq type="get"&
&query xmlns="jabber:iq:roster"/&
&iq type="result"&
&query xmlns="jabber:iq:roster"&
&item jid="suke@skh."xs/&
&item jid="gmz@skh."/&
&item jid="beta@skh."/&
&message from="suke@skh."
to="beta@skh."&
&body&Off with his head!&/body&
&/message&
&message from="lj@skh."
to="cyl@skh. "&
&body&You are all pardoned.&/body&
&/message&
&presence type="unavailable"/&
&/stream:stream&
客户端与服务器通信的过程中,服务器必须允许客户端共享一个TCP连接来传输XML节,包括从客户端传到服务器和从服务器传到客户端。服务器到服务器的通信过程中,服务器必须用一个TCP连接向对方发送XML节,另一个TCP连接(由对方初始化)接受对方的XML节,一共两个TCP连接。通讯原语在XMPP中,一个节可以被认为是通讯的基本单位,类似于一个数据包或其他网络协议的消息。有几个因素决定了一个节的意义
节元素的名称,有message,presence或者iq。每一种节服务器对它们的路由方式不同,并且客户端对它们的处理也不同
Type属性的值依赖于实际中节种类而变化。这个值由收件人来进一步区分每个节是如何处理的。
子元素,定义了节的有效载荷,有效载荷可能呈现给用户或者按照规范定义的有效载荷的命名空间以自动的方式处理。
&message/&节是使用基本的“push”方法从一个地方到另一个地方得到消息,消息是不可告知的,它是一种“fire-and-forget”的机制从一个地方到另一个地方快速获取信息。消息的type
normal:单个的消息,对应的回应可能会或者可能不会很快到来。
chat:在两个实体间店实时对话中交换
groupchat:多用户聊天室中交换
headline:发送警告和通告,并不期望有回应
error:对先前发送消息发生错误,实体检测这个问题将返回一个类型error的消息。消息的to:预期收件人的JabberID消息的from:发送者的JabberID,from地址不由发送客户端提供,而是由发送者的服务器添加邮戳,以避免地址欺骗。消息也包含有载荷元素。核心XMPP规格定义了一些非常基本的有效载荷,例如&body/&和&subject/&,被用于人对人的聊天信息,消息(和其他类的节)可以包含在核心XMPP规格中没有定义的有效载荷``` xml&message from="suke@skh."
to="beta@skh."
type="chat"&
&body&Who are you?&/body&
&subject&Query&/subject&&/message&
出席通知其他实体的网络可用性,并且使你能够知道其他实体是否在线和可用于通讯。
它是一个在互联网上沟通和合作的催化剂,因为人们更容易与你交流,如果他们知道你是否在线。
只有通过你授权的人才能看到你是否在线。这个授权被称为出席订阅(presence subscription)
订阅模型意味着XMPP的&presence/&节本质上是一个简单、专门的发布-订阅方法,通过这种形式,当你在线,然后将状态改为“会议中”或者“午餐中”,然后离线,向你订阅了出席的人将收到更新的出席信息。
&presence from="suke@skh."&
&show&xa&/show&
&status&down the rabbit hole!&/status&
&/presence&
在XMPP的IM应用中,出席通常显示在你的允许出席的一种联系人列表的名册中(roster)。你的名册包含JabberIDs列表和你的出席订阅状态。当你在线时,你向你的服务器宣告你的出席,然后服务器将你在线通知告诉你的联系人,并且获得他们的当前出席显示在你的客户端界面上。
信息/查询(IQ)节提供了一种用于请求-应答交互和简单工作流的结构.和&message/&节不同,一个IQ节能包含仅有一个有效载荷,用于定义处理的请求或接收人采用的行为。发送IQ节的实体必须总是接收一个回复(通常由目的接收者或接受者的服务器产生)。请求和应答通过使用id属性跟踪,id属性由请求实体生成,并被包含在应答的实体中信息/查询type
请求实体信息,例如请求注册一个账户(类似于HTTP GET)。
请求实体提供一些信息或作出一个请求(类似于HTTP POST或PUT)。
应答实体返回get操作的结果(例如一个实体必须提供信息用来注册账户),或者确认一个set请求(类似于一个HTTP200状态码)。
应答实体或一个中间实体,例如XMPP服务器,通知请求实体它不能处理get或set请求(例如,因为请求的格式不正确,请求实体无权执行该操作等)。早期在HTTP中使用的数字错误代码已被可扩展错误条件的XML元素取代。IQ或message?
XMPP消息节提供“fire-and-forget”传输方式,该方式最适合用于人类可读文本、警告、通知,并且任何时候你都不需要去确保内容是否真的被传递出去。IQ节提供一种更可靠的传输,优化了结构化数据的交换,通常是非人类可读数据.举例苏克通过发送一个IQ-get,该请求包含一个由jabber:iq:roster命名空间限定的空有效载荷,苏克通过发送一个IQ-get,该请求包含一个由jabber:iq:roster命名空间限定的空有效载荷
&iq from="suke@skh."
id="rr82a1z7"
type="get"&
&query xmlns="jabber:iq:roster"/&
服务器回复该命名空间限定一个非空的有效载荷,在这种情况下,包含一个&item/&元素对应名册中的一个联系人。
&iq from="skh."
id="rr82a1z7"
to="suke@skh."
type="result"&
&query xmlns="jabber:iq:roster"&
&item jid="suke@skh."/&
&item jid="gmz@skh."/&
&item jid="beta@skh."/&
苏克使用IQ-set向名册中添加一个新的联系人:
&iq from="suke@skh."
id="ru761vd7"
type="set"&
&query xmlns="jabber:iq:roster"&
&item jid="gmz@skh."/&
苏克也可以使用IQ-set向名册中添加一个新的联系人:
&iq from=" skh. "
id="ru761vd7"
to=" suke@skh. /Psi"
type="result"/&
IQ-get或IQ-set的有效载荷总是通过由一个特定的XML命名空间限定的自有格式,这些命名空间由许多XMPP协议文档之一来指定。你可以想象每个有效载荷作为一个命令由接收人处理。IQ-get请求一种特定的信息,例如注册表、配置数据、服务发现信息或联系人列表。IQ-set创建、更新或删除一种特定的信息,例如已完成的表单、已更新的配置数据或者向联系人列表添加。
参考资料:
xmpp-权威指南xmpp-RFC3920
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
ios精华文章及个人总结
· 81人关注
三人行,必有我师
一起玩转IOS
· 36人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:

我要回帖

更多关于 ios xmpp服务器搭建 的文章

 

随机推荐