zoukankan      html  css  js  c++  java
  • xmpp with openfire之一 XMPP AND OPENFIRE

    1、什么是XMPP ?
      XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
      XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;
      核心的XML流传输协议
      基于XML流传输的即时通讯扩展应用
      XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。
      XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
      XMPP的扩展协议Jingle使得其支持语音和视频。
      2、XMPP的基本网络结构是怎样的?
      XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
      3、XMPP通过TCP传什么了?
      传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。
      4、举个例子看看所谓的XML流是什么样子的?
      客户端:<?xml version='1.0'?>
      <stream:stream
      to='example.com'
      xmlns='jabber:client'
      xmlns:stream='http://etherx.jabber.org/streams'
      version='1.0'>
      服务器:<?xml version='1.0'?>
      <stream:stream
      from='example.com'
      id='someid'
      xmlns='jabber:client'
      xmlns:stream='http://etherx.jabber.org/streams'
      version='1.0'>
      ...其他通信...
      客户端:<message from='juliet@example.com'
      to='romeo@example.net'
      xml:lang='en'>
      客户端: <body>Art thou not Romeo, and a Montague?</body>
      客户端:</message>
      服务器:<message from='romeo@example.net'
      to='juliet@example.com'
      xml:lang='en'>
      服务器:<body>Neither, fair saint, if either thee dislike.</body>
      服务器:</message>
      客户端:</stream:stream>
      服务器:</stream:stream>
      以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。


    可以到http://xmpp.org/查询XMPP的介绍和文档

    非常不巧的是,当我写这篇BLOG的时候,XMPP中文翻译计划网站http://www.jabbercn.org/正在更新,网站管理员称原有的数据稍后将转入新wiki中。

    当前主流操作系统下的XMPP客户端实现有:
    Apple MacOS

    Adium
    iChat
    Console

    centericq
    Fama IM
    GNU Freetalk
    mcabber
    Cross-Platform (Linux/Mac/Windows)

    Coccinella
    Jabbim
    Jeti
    Pidgin
    Psi
    Spark
    Tkabber
    Linux/Unix

    Ayttm
    BitlBee
    Empathy
    Gajim (also Windows)
    Gossip
    jabber.el
    Kopete
    Sim-IM
    SIP Communicator
    Microsoft Windows
    Exodus
    JAJC
    Miranda IM
    Pandion
    Trillian Pro

    Mobile Phone / PDA

    Bombus
    IM+
    imov Messenger
    Jabber Mix Client
    Lampiro
    mChat
    OctroTalk
    Talkonaut
    Vayusphere
    Web Browser

    Claros Chat
    iJab
    Jabbear
    JWChat
    SamePlace
    SparkWeb
    TrophyIM

    http://xmpp.org/software/clients.shtml

    xmpp的服务器端实现:
    Citadel
    CommuniGate Pro
    djabberd
    ejabberd
    IceWarp
    iChat Server
    in.jabberd
    Isode M-Link
    jabberd 1.x
    jabberd 2.x
    Jabber XCP
    Jerry Messenger
    Openfire
    OpenIM
    Prosody
    psyced
    Sun Java System Instant Messaging
    Tigase
    http://xmpp.org/software/servers.shtml

    openfire
    openfire是Jive Software的XMPP开源跨平台服务端实现,扩展灵活,插件丰富,有非常好的社区支持,当前版本3.6.2。在以后的文章中,我将逐渐介绍一些openfire的功能及二次开发。
    *同时Jive Software还有非常棒的spark客户端实现及smack开发包。

    openfire最新版本下载http://www.igniterealtime.org/projects/openfire/index.jsp
  • 相关阅读:
    Elementary Methods in Number Theory Exercise 1.2.25
    Elementary Methods in Number Theory Exercise 1.2.14
    图解欧几里德算法
    图解欧几里德算法
    Elementary Methods in Number Theory Exercise 1.2.14
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    分享下多年积累的对JAVA程序员成长之路的总结
    android异常之都是deamon惹的祸The connection to adb is down, and a severe error has occured.
    TomatoCartv1.1.8.2部署时报错
    JavaScript浏览器对象之二Document对象
  • 原文地址:https://www.cnblogs.com/hannover/p/1353803.html
Copyright © 2011-2022 走看看