zoukankan      html  css  js  c++  java
  • XMPP学习——1、介绍

    XMPPExtensible Messaging and Presence Protocol,前称Jabber[1])是一种以XML为基础的开放式实时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。XMPP因为被Google Talk应用而被广大网民所接触。

     

    运作方式

    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服务器将信息寄送给罗密欧。如果他目前不在在线,那么存储信息以待稍后寄送。

    JulietleftrightarrowCapulet.comleftrightarrowMontague.netleftrightarrowRomeo

    罗密欧与朱丽叶两人的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>

    参考:http://zh.wikipedia.org/wiki/XMPP

  • 相关阅读:
    How to change hostname on SLE
    How to install starDIct on suse OS?
    python logging usage
    How to reset password for unknow root
    How to use wget ?
    How to only capute sub-matched character by grep
    How to inspect who is caller of func and who is the class of instance
    How to use groovy script on jenkins
    Vim ide for shell development
    linux高性能服务器编程 (二) --IP协议详解
  • 原文地址:https://www.cnblogs.com/coolwxb/p/3517548.html
Copyright © 2011-2022 走看看