XMPP(Extensible Messaging and Presence Protocol)可扩展消息呈现处理协议,一种基于XML的协议。

1、 XMPP可以实现多个客户端、多个服务器、多个网关的即时通讯
;
2、 通常客户端与服务器连接的端为:5222,服务器与服务器连接的端口为5269;
3、 XMPP在网络上进行通讯,所以每个通讯实体都有一个地址,这个地址通常包含三个字段:Domain identifier(域名)、Node identifier(节点名)、Resource identifier(资源名),其中域名为必须元素,其他两个为非必需元素。他们的格式是Node@Domain/Resource或者Node@Domain。

XML流

XMPP本质上是一种XML流技术,客户端开始和XMPP服务器进行通话时,会建立一个长时间的TCP连接,然后和服务器协商一个XML流,一旦你和你的服务器建立了一个XML流,你和服务器之间就可以通过流交换三个特殊的XML片段:<message/>、<presenc/>、<iq/>,这些片段称为XML节,是XML中三个最有意义的片段。
举例说明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'> 
以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商出需要通讯协议,中间通信过程就是客户端发送的一个个XML Stanza,。服务器根据客户端发送的信息以及程序的逻辑,发回XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。

绑定到TCP上

在客户端与服务器通讯的过程中,服务器必须允许多个客户端共享一个TCP连接来传输XML节,包括从客户端传到服务器和从服务器传到客户端。
在服务器与服务器通讯的过程中,服务器必须建立两个TCP连接。一个用来向对方发送XML节,一个用于接收对方传来的XML节(此节由对方初始化)。
在这种通讯过程中,节 被认为是最基本的通讯单位,意义等同于一个数据包或其他网络通讯单位。

传输机制

XMPP是通过传送XML文件进行信息交流的,并不是类似QQ的点对点通讯,而是客户端到服务器再到客户端的通讯方式,举例如下:
1、 由客户端通过IO流向服务器发送XML文件,其中包含自身的用户名和密码;
2、 服务器收到客户端发来的XML文件后,提取其中的用户名、密码信息,并对其进行验证。验证成功时则向客户端会给客户端发一个XML文件表明已经登陆成功;
3、 登陆成功后,客户端发送一个获取好友名单的XML文件给服务器,服务器再将当前用户的好友以XML文件的方式发回给客户端,
4、 客户端选择一个好友,并向好友发送信息(其实是客户端先给服务器发送消息,服务器将消息保存并转发个好友所在的客户端),好友接收到消息,通讯完成。

XMPP即时通讯机制相关推荐

  1. xmpp即时通讯的笔记(摘抄)

    xmpp的使用: 即时通讯 instant messaging(IM) :  -->实时收发信息! 即时通讯相关软件: **QQ,MSN,GoogleTalk,AIM,Jabber(XMPP别名 ...

  2. XMPP - 即时通讯技术

    XMPP-即时通讯技术简介 (IM -- Instant Messaging)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的 ...

  3. java xmpp即时通讯_基于XMPP协议即时通讯工具开发总结

    一.概要 转眼毕业了,毕业设计的课题是"基于XMPP协议的通讯工具",开发平台式android,实现了基本的离线消息,文字聊天,表情聊天,文件传输,语音聊天的功能. 本文主要介绍开 ...

  4. 项目开发--------XMPP即时通讯

    一.基本框架结构: StroyBoard的基本页面搭建: 二.个功能代码块的是实现 LoginViewController.m文件(登录页面的基本配置) #import "LoginView ...

  5. Mac下使用XMPP即时通讯【2】:安装XMPP和Spark

    转载自:http://www.cnblogs.com/maxinliang/p/3582924.html 一.下载并安装openfire 1.下载最新的openfire安装文件 官方下载站点:http ...

  6. Android smack+ejabberd+spack 实现即时通讯(二)客户端连接

    这个是写客户端连接服务端的内容  我们这里使用的封装好的jar包 samck来完成xmpp即时通讯 //如有不了解xmpp请看 http://blog.csdn.net/lnb333666/artic ...

  7. 即时通讯项目 java版本qq (含服务器和客户端)源码_即时通讯安卓-QQ互联网和即时通讯云,如何实现即时通讯,这是Android还是Java...

    Android是系统平台. 应用程序所做的是应用程序的开发和完成 也就是说,通信是网络通信,但在手机环境中,网络的情况更复杂,所以我们必须做好结构 安卓即时通讯. 怎么做?安卓版TT即时通讯排行. A ...

  8. 关于 IMPP/XMPP/SIMPLE 这几种即时通讯协议和NAT traversal

    IM(Instant Messaging)正在被广泛地采用,特别是在公司与它们的客户互动联接方案上.为了解决即时通讯的标准问题,IETF成立了专门的工作小组,研究和开发与IM相关的协议. 目前IM有四 ...

  9. 企业即时通讯软件,网络通讯协议和机制怎么选?

    一个大型组织如果需要从头开发一套自主可控的即时通讯软件,从技术角度第一个要考虑的核心问题就是:如何确定客户端和服务器之间的通讯协议和通讯机制? 通讯协议怎么选? 大型组织架构就意味着员工人数多,网络情 ...

  10. Android学习笔记--基于XMPP的即时通讯

    一.常见即时通讯实现 socket openfire+asmack 环信 信鸽 融云 二.XMPP优势 1. 开放性 XMPP协议是自由.开放.公开的,并且易于了解.而且在客户端.服务器.组件.源码库 ...

最新文章

  1. 一文读懂图像局部特征点检测算法
  2. [C语言] qsort 快速排序函数讲解
  3. Linux运维系统工程师系列---16
  4. c:if判断参数是否为空
  5. Edit Distance Python源码及支持包的实现
  6. 并发编程-14线程安全策略之并发容器(J.U.C)中的集合类
  7. mysql中间件研究(Atlas,cobar,TDDL)
  8. 程序员每天该做的事情
  9. leetcode 290. 单词规律(hash)
  10. calendar的使用以及如何获取某月份最后一天的方法
  11. sql server死锁_SQL Server如何选择死锁受害者
  12. 用python将word文档导入数据库_python读取word文档,插入mysql数据库实例
  13. python实现搜索引擎——构建爬虫系统(二)
  14. MATLAB Cholesky分解
  15. postgresql 数据库迁移
  16. Linux 中VirtualBox6.0.8 仅主机模式不可用
  17. NSString转GBK编码格式
  18. (Tiled官方文档翻译)第一节:简介及创建工程、图层集
  19. f烽火ExMobi,移动应用平台的互联网思维
  20. 哎,开发又被骗了……

热门文章

  1. acm 用java_acm竞赛中使用java是一种什么体验?
  2. SecureCRT 完美代替超级终端
  3. 假设某台台式计算机的内存储器容量为128,假设某台计算机的内存储器容量为128MB,硬盘容量为10GB,硬盘的容量是内存容量的多少倍?...
  4. 计算机应用基础知识竞赛题,计算机基础知识题库
  5. pcduino_arm_rtl8187L 驱动安装编译过程
  6. maya中英文对照_Maya中英文对照
  7. 计算机无法共享打印机共享的打印机驱动,打印机不能共享_打印机不能共享怎么办?-太平洋IT百科...
  8. 【华为云技术分享】从软件开发到 AI 领域工程师:模型训练篇
  9. android 谷歌输入法切换,ANDROID谷歌拼音 输入法肿么切换?
  10. eclipse使用配置教程