XMPP学习1-认识XMPP

XMPP是什么?

XMPP,可扩展消息处理和现场(出席)协议(eXtensible Messaging and Presence Protocol),是一种用来在两个地点之间传递小型的结构化数据段的协议,一个关于收发消息的规范。

架构

这里写图片描述
类似于万维网和电子邮件网络的架构一样, XMPP 技术使用一种分散的客户端-服务器架构使用分散的客户端-服务器架构的优点在于它把人们关注的东西分离开来(客户端开发者可以专注于用户体验,而服务器开发者可以专注于可靠性和扩展性);相对于纯点对点技术,组织更容易使用这种结构进行管理;由于整个系统不存在单点失效,所以该结构也具有相当的鲁棒性(任何人可以使用他们自己的 XMPP 服务器,并加入到网络中);并且服务器可以执行如用户认证,通道加密,防止地址欺骗等重要的安全政策。

XMPP系统

构建发布-订阅服务、多人聊天、表单检索和处理、服务发现、实时数据传输、隐私控制以及远程过程调用。

XMPP网络

任何 XMPP 网络都是由若干角色组成的,这些角色可以分为服务器、客户端、组件和服务器插件。
服务器
XMPP 服务器是XMPP网络的交通系统,它的任务就是为XMPP节提供路由,无论这些节是从内部的一个用户发往另一个用户,还是从本地用户发往远程服务器。常见的XMPP服务器包含Openfire、Ejabberd、Tigase、M-Link、Jabber-XCP等。
客户端
大多数 XMPP 实体均是客户端,它们通过客户端-服务器协议连接到 XMPP 服务器。这些实体中许多都是由人类驱动的、传统的 IM 用户,但也有一些以机器人形式运行的自动化服务。
组件
并不只有客户端能够连接到XMPP服务器,大多数服务器还支持外部服务器组件。这些组件通过添加某种新服务来增强服务器的行为。这些组件在服务器内部有各自的身份和地址,但在外部运行并通过组件协议通信,在外界看来,就犹如一个子服务器。
插件
有许多XMPP服务器还可以通过插件进行扩展。这些插件通常采用与服务器自身相同的编程语言编写,并在服务器的进程内运行。它们的作用在很大程度上与外部组件重叠,但插件还能够访问内部服务器数据结构并改变核心服务器行为。与组件相比,插件已经减轻了开销,这是因为它们不需要通过网络套接字进行通信。它们也不需要分析或序列化XML,而是可以直接操作各节的内部服务器表示。

XMPP寻址

XMPP 网络上的每个实体都有一个或多个地址(或称为 JID,jabber identifier)-形如user@ejaberd.org/resource
JID 由三部分组成:
节点(可选) -大小写不敏感
域(必选)-大小写不敏感
资源(可选) -大小写敏感
JID划分为两种类型,即裸JID和完整JID。完整JID总是特定实体的最具体的地址,而裸 JID只是完整JID去除资源部分后的地址。

XMPP节

在XMPP中,各项工作均是通过在一个XMPP流上发送和接收XMPP节来完成的(打开TCP连接,异步交换XML消息)。
核心XMPP 工具集由三种基本节组成:
1 <presence>
2 <message>
3 <iq>
下面的示例给出了一段经过简化的简短的 XMPP 会话。

<stream:stream>
     <iq type='get'>
         <query xmlns='jabber:iq:roster'/>
     </iq>

     <presence/>

     <message to='user2@ejabberd.org'
                         from='user1@nassue.org/ballroom'
                     type='chat'>
         <body>I cannot talk of books in a ball-room; my head is always full of
             something else.</body>
     </message>

     <presence type='unavailable'/>
</stream:stream>

在这个示例中
1 user1 通过发送起始<stream:stream> 标记创建了一个 XMPP 流
2 在打开流之后,user1使用<iq> 节请求获取自己已存储的花名册
3 使用<presence>节来通知服务器自己在线并且可以访问
4 向user2发送一条简短的<message> 节,并拒绝试图发起的聊天请求
5 发送了一个<presence> 节来告诉服务器自己不可访问并关闭<stream:stream> 元素结束会话。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值