`
bsr1983
  • 浏览: 1100185 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XMPP学习笔记一 概述

 
阅读更多
        转载自XMPP的wiki页面:http://zh.wikipedia.org/wiki/XMPP
         XMPP的wiki简介摘录:
        XMPP(Extensible Messaging and Presence Protocol,前称Jabber[1])是一种以XML为基础的开放式实时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。XMPP因为被Google Talk应用而被广大网民所接触。
        Jeremie Miller于1998年开始了这个项目。第一个公开版本于2000年5月发行。这个项目的主要产品是jabberd,XMPP的服务器端软件。它既可以创建私人的XMPP网络,也可以加入全球的公共XMPP网络。XMPP的关键特色是,分散式的实时通信系统,以及使用XML流。
        Jabber已经由IETF XMPP协议(RFC3920)标准化。 
        Jabber是一个开放源代码形式组织产生的网络实时通信协议。XMPP原本是为即时通讯而量身定制,但由于XML Stanza本身是XML元素,在基于XML灵活发展的特性下,使得XMPP也可以适用其他方面,已经得到了IETF的批准。XMPP与IMPP、PRIM、SIP(SIMPLE)合称四大IM协议主流,在此4大协议中,XMPP是最灵活的。
        特色
     (1)优点
        开放
        XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现。
        标准
        互联网工程工作小组(IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的实时通信及Presence技术。而XMPP的技术规格已被定义在RFC 3920及RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。
        证实可用
        第一个Jabber(现在XMPP)技术是Jeremie Miller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运作著,并有数以百万计的人们使用XMPP实时传讯软件。
        分散式
        XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验。
        安全
        任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已内置于核心XMPP技术规格中。
        可扩展
        XML名字空间的威力可使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展由XMPP标准基金会。
        弹性佳
        XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
        多样性
        用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。
        (2)缺点 
        数据负载太重
        随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
        没有二进制数据
        XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。

    运作方式

    XMPP网络是基于服务器的(即客户端之间彼此不直接交谈),但是也是分散式的。不像AOL实时通或MSN Messenger等服务,XMPP没有中央官方服务器。Jabber.org的公众服务器上有大量的用户,所以有些人误解了,以为它是官方服务器,不过事实上任何人都可以在自己的域名上运行XMPP服务器。 
       Jabber识别符(JID)是用户登录时所使用的账号,看起来通常像一个电子邮件地址,如someone@example.com;前半部分为用户名,后半部分为XMPP服务器域名,两个字段以@符号区隔。 
       假设朱丽叶(juliet@capulet.com)想和罗密欧(romeo@montague.net)通话,他们两人的账号分别在Capulet.com及Montague.net的服务器上。当朱丽叶输入消息并按下发送钮之后,一连串的事件就发生了: 
        (1)朱丽叶的XMPP客户端将她的消息发送到Capulet.com XMPP服务器。 
        (2) Capulet.com XMPP服务器打开与Montague.net XMPP服务器的连接。 
        (3)Montague.net XMPP服务器将消息寄送给罗密欧。如果他目前不在在线,那么存储消息以待稍后寄送。
        罗密欧与朱丽叶两人的XMPP服务是由两家不同的业者所提供的,而他们彼此传讯时,不须拥有对方服务器的账号,也不须成为对方业者的会员。
    与其他协议互联
    各IM之间的互传 

        XMPP协议的另一功能是运输(transports),也被称为网关(gateways),可允许用户通过网络使用其它协议。这可以是其他的实时通信协议,也可以是不同协议,如短信(SMS)或电子邮件。

 



 

    XMPP协议通过HTTP传输
        在原来的规格,XMPP协议可以使用HTTP的方式有两种:轮询(polling)[4]与绑定(binding)[5]。轮询现在不推荐,基本上,轮询意味着HTTP邮件存储在服务器端的数据库上,客户端必须一再地以HTTP的GET和POST的方式去抓取(以及刊出)其中的消息。然而使用绑定的方式时,客户端会保留一个长存的HTTP连接,等待一旦服务器有新的消息时,就立刻接收消息。因为轮询的结果往往是服务端没有新消息,这种推送的通知模式比轮询的方式更有效率。
        由于客户端使用HTTP,大多数防火墙允许客户端获取和留言没有任何障碍。因此,即使使用XMPP协议的TCP端口被拦截,服务器也能正常地倾听一般的HTTP端口,其上的消息也能保持畅通。还有一些网站更允许大众经由浏览器登录进XMPP。尤有甚者,还有一些公共的服务器同时拥有标准HTTP(80端口)和HTTPS(443端口),因此又有助于通过防火墙。
        
    实现 
    XMPP客户端软件 
    XMPP协议是由大量的XMPP协议的客户端,服务器和程序库。主要的文章包含了几个XMPP协议列表客户的多种平台。
    XMPP服务器端软件
    使用XMPP协议的客户端与服务器端对话的例子
    客户端(kuusipuu)连接到一个XMPP服务器(amessage.de:5222/TCP),发送一条消息(主题和内容均为“test 1449”)到另一个客户端(tero),然后注销。 

kuusipuu:

<?xml version="1.0"?>

<stream:stream xmlns:stream="http://etherx.jabber.org/streams"

xmlns="jabber:client" to="amessage.de">

 

amessage.de:

<stream:stream xmlns='jabber:client'

xmlns:stream='http://etherx.jabber.org/streams'

from='amessage.de' id='1461777714'>

 

kuusipuu:

<iq type="set" id="auth_2" to="amessage.de" >

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

<username>kuusipuu</username>

<password>mypassword</password>

<resource>Work</resource>

</query>

</iq>

 

amessage.de:

<iq from="amessage.de" id='auth_2' type='result'/>

 

kuusipuu:

<message to="tero@example.com" >

<subject>test 1449</subject>

<body>test 1449</body>

</message>

<presence type="unavailable" >

<status>Logged out</status>

</presence>

</stream:stream>

 

amessage.de:

</stream:stream>

  • 大小: 5.8 KB
  • 大小: 20.5 KB
分享到:
评论

相关推荐

    XMPP学习入门笔记

    XMPP学习入门笔记,我化很多时间整理搜集,感谢共享

    XMPPNote-Android:Android平台XMPP学习笔记

    XMPPNote-AndroidAndroid平台XMPP学习笔记

    xmpp协议笔记

    学习xmpp协议的笔记,非常适合初学者,详细罗列出了各种常用元素已经名字空间

    xmpp学习心得

    XMPP,可扩展消息和出席(存在)协议(eXtensible Messageing and Presence Protocol)。顾名思义,这是一个关于收发消息的规范。 最初研发IMPP(即时信息和出席协议,Instant Messaging and Presence Protocol)是...

    XMPP_协议笔记

    XMPP_协议笔记

    Android学习每日一例 Google Map XMPP

    • Snake游戏深入解析 • Android学习每日一例——ApiDemos • JetBoy游戏深入解析(上)(中)(下) • 构建Android平台Google Map应用 • Android 中的XMPP 应用

    xmpp协议介绍,XMPP体系架构

    XMPP server:其内核是一个XMPP路由器,完成基本组件间的数据包交换和路由。 功能: 1.会话管理器:负责客户端会话认证,在线状态,用户联系表等 2.数据存储器(XDB):连接数据库系统,保持用户信息、通信日志等 3....

    Jabber(XMPP)服务协议的概述中文版

    Jabber(XMPP)服务协议的概述中文版

    Go-hipchat(xmpp)-一个golang包用于与HipChat通信通过XMPP

    hipchat (xmpp) - 一个golang包用于与HipChat通信通过XMPP

    XMPP即时通讯入门学习资料文档

    内含xmpp即时通讯协议的中文翻译文档,即时通讯协议(Openfire服务器版),协议介绍以及学习笔记;Openfire服务器下载地址http://www.igniterealtime.org/downloads/index.jsp

    xmpp framework

    XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址...

    xmpp协议说明ppt

    xmpp协议介绍PPT,详细介绍了XMPP核心协议方方面面

    android的XMPP客户端

    android的XMPP客户端

    XMPP协议中文参考指南

    XMPP是一个流化XML[XML]元素的协议,用于准实时的交换消息和出席信息。XMPP的核心功能定义在Extensible Messaging and Presence Protocol (XMPP): Core [XMPP-CORE|XMPP文档列表/XMPP正式RFC标准/RFC3920]. 这些功能...

    xmpp协议和xmpp扩展协议

    xmpp协议和xmpp扩展协议,chm格式

    一个简单的xmpp服务器实现

    一个简单的xmpp服务器实现

    Android资料_XMPP

    基于XMPP的多方通信系统研究与实现.pdf 基于XMPP的P2P即时通信系统的研究及实现.kdh 基于SIMPLE和XMPP协议的移动IM研究.pdf XMPP研究与应用.pdf XMPP协议研究及其在IM系统群组通信中的应用.pdf XMPP协议分析及客户端...

    Android聊天项目D3Xmpp.zip

    D3Xmpp 是一个完整的 XMPP 的 Android 的项目服务端使用 openfire 3.9.3客户端使用 ...PS:该项目是本人在学习xmpp过程中总结的一些东西,代码组织凌乱,旨在帮助新入门xmpp学习xmpp的基本使用 标签:D3Xmpp

    erlang分布式 XMPP Server.ppt

    erlang分布式 XMPP Seerlang分布式 XMPP Serverrvererlang分布式 XMPP Servererlang分布式 XMPP Server

    Practical.XMPP.1785287982

    Learn about the fundamentals of XMPP and be able to work with the core functionality both server-side and in the browser Build a simple 1-to-1 chat (the "Hello World" of XMPP), explore multi-user chat...

Global site tag (gtag.js) - Google Analytics