相关背景

IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用。为了解决即时通信的标准问题,IETF(互联网工程任务组 The Internet Engineering Task Force)成立了专门的小组、研究和开发IM相关协议。

通信协议

PRIM

空间和即时信息协议(Presence and Instant Messaging)

该协议是IETF撰写的关于即时通讯标准协议的早期版本,其抽象模型最早是在2000年2月份提出的RFC2778中提出的。

从2001年起,该项目无任何进展。现在SIP协议以及其衍生出的SIMPLE以及XMPP协议才被认为是即时消息协议的标准实现。

具体参考:

https://en.wikipedia.org/wiki/Presence_and_Instant_Messaging

IMPP

即时信息与空间协议(Instant Messaging and Presence Protocal)

IMPP主要定义必要的协议和数据格式,用来构件一个具有空间接收、发布能力的即时消息系统。到目前为止,IETF已经出了三个草案的RFC,但主要有两个:一个是针对站点空间和即时通讯模型的(RFC 2778);另一个是针对即时通讯/空间协议需求条件的(RFC2779)。RFC2778是一个资料性质的草案,定义了所有presence和IM服务的原理。RFC2779定义了IMPP的最小需求条件。另外,这个草案还就presence服务定义了一些条款,例如运行的命令、信息的格式、以及presence服务器如何把presence的状态变化通知给客户。

具体参考:

https://en.wikipedia.org/w/index.php?title=Instant_Messaging_and_Presence_Protocol&redirect=no

SIP(SIMPLE)

SIP(Session Initiation Protocol)

SIP一种用于信令和控制多媒体通讯session的协议。其最常见的应用是通过SIP协议实现的语音和视频网络电话,以及通过IP网络实现的即时消息通讯。该协议规定了在各通信方中传递的消息,这些消息决定这一个网络电话的建立、终止以及其他必要的步骤。SIP协议可以用于创建、修改和终止一个或多个媒体连接。SIP是一个应用层协议,被设计为独立于下层的传输层。它是一个基于文本的协议,结合了很多HTTP和SMTP协议的元素。SIP协议通常与其他应用层协议一起工作。

SIMPLE(The Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions)

SIMPLE协议是由IETF定义的基于SIP的一个即时消息(IM)和空间协议套。与现今广泛使用的软件实现即时通信与空间协议相比,SIMPLE是类似于XMPP的公开标准。

SIMPLE使用SIP协议发送presence信息。SIP是IETF为终端定制的一种协议,其一般用于建立语音通话中,一旦建立连接后,使用实时协议(RTP)进行实际上的语音发送。但SIP不仅可以用在语音上,也可以用在视频上。SIMPLE被定义为一个建立IM进程的方法。

XMPP

可扩展的消息与空间协议(Extensible Messaging and Presence Protocol)

该协议的前身是Jabber,我们采取XMPP协议主来实现IM主要是考虑XMPP协议是以XML为基础的,它继承了在XML环境中灵活的发展性。这表明XMPP是可扩展的,所以XMPP信息不仅可以是简单的文本,而且可以携带复杂的数据和各种格式的文件,也就是说XMPP协议不仅可以用在人与人之间的交流,而且可以实现软件与软件或软件与人之间的交流,目前支持XMPP协议的即时通讯工具有Gtalk、FaceBook IM、Twitter、网易POPO等等通讯工具。

协议选型

在以上四种协议中,XMPP协议是最为灵活的,XMPP协议基于XML,因此具有良好的扩展性,经过扩展后的XML协议可以发送扩展信息处理用户的需求,以及在XMPP顶端建立如内容发布系统和基于地址的服务等应用程序。而且XMPP包含了针对服务器的软件协议,使之能与另外一个通话,这使得开发者更容易建立客户应用程序或给一个配置好的系统添加功能。

另外,XMPP协议在业界已有成熟的开源实现方案,从开发成本上来讲也是很有优势的。

基于XMPP的即时通信系统的建立(一)— XMPP基础概念的更多相关文章

  1. 基于XMPP的即时通信系统的建立(二)— XMPP详解

    XMPP详解 XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理和现场协议)是一种在两个地点间传递小型结构化数据的协议.在此基础上,XMPP ...

  2. 基于XMPP的即时通信系统的建立 — XMPP IQ详解

    XMPP详解 XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理和现场协议)是一种在两个地点间传递小型结构化数据的协议.在此基础上,XMPP ...

  3. 基于XMPP的即时通信系统的建立(三)— 程序设计概览

    XMPP与HTTP的比较 XMPP的优势 Ÿ   1. 推送数据 HTTP只能从服务器哪里请求数据,除非服务器正在响应客户端请求,否则不能向客户端发送数据.但XMPP连接是双向的,任何一方在任何时候都 ...

  4. 基于XMPP的即时通信系统的建立(四)— 协议详解

    Presence 在XMPP协议中,我们使用presence来获取用户是否已经上线以及是否可以通信的状态. 为了能够知道自己联系人的状态以及让联系人知道自己的状态,用户上线后需要订阅联系人的状态,联系 ...

  5. 基于XMPP的即时通信系统的建立(五)— openfire

    现决定使用Openfire作为服务端,Openfire采用Java开发,基于XMPP的实时开源协作服务器.单台可支持上万并发用户. Openfire体系结构 Openfire体系由其提供的服务器端.客 ...

  6. 基于XMPP的即时通信系统的建立(六)— 开发环境搭建

    服务器端 新建空工程 使用Eclipse新建名为openfire的空java工程. 导入源代码 这里使用的是openfire的openfire_src_3_10_3.zip源码. 导入后将目录src/ ...

  7. 基于XMPP的即时通信系统的建立(四)— 组件介绍

    服务端 服务器 许可证 操作系统 是否支持任意客户端登录 备注 ejabberd 开源 Elang 是 支持虚拟主机和集群 Openfire Apache Java 是 Tigase GPLv3 Ja ...

  8. Android基于XMPP的即时通讯2-文件传输

    本文是在上一篇博文Android基于XMPP的即时通讯1-基本对话的基础上,添加新的功能,文件传输 1.初始化文件传输管理类 public static FileTransferManager get ...

  9. 【XMPP】基于XMPP的即时通讯解决方案

    什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...

随机推荐

  1. 两行代码搞定UITableView无数据无网络显示-b

    不知是否有像我一样的,每次写TableView在监听网络和无数据源时逻辑处理提示视图都是一堆代码,很繁琐也很重复的垃圾代码(可能就只有我这样

  2. Windows下访问VMware中tomcat

    很多人都可能和我一样,运行在虚拟机上,开发时在windows上进行. 在linux上运行tomcat,并且windows中能ping通虚拟机,但就不能通过虚拟机ip访问到8080端口上的tomcat, ...

  3. 【转】android 选取图片

    转自:http://www.cnblogs.com/top5/archive/2012/03/06/2381986.html 这几天 在学习并开发android系统的图片浏览 音频 视频 的浏览 由于 ...

  4. 文本编辑器 markdown

    http://www.cnblogs.com/youxia/p/linux014.html markdown对数学公式的支持http://www.linuxidc.com/Linux/2014-08/ ...

  5. NYOJ-733 万圣节派对 AC 分类: NYOJ 2014-01-02 00:41 303人阅读 评论(0) 收藏

    #include <stdio.h> #include <math.h> int main() { int t, a, b, i, j, n; scanf("%d&q ...

  6. [转载]App.Config详解及读写操作

    App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是c ...

  7. uva 10859

    刘书例题  树形dp #include <cstdio> #include <cstdlib> #include <cmath> #include <map& ...

  8. CC150 上面重要的题目总结

    第一章 : 全部重要 (1.6, 1.7 Leetcode上有). 1.5 面A碰到 (string compression) 1.7面Z碰到 (set 0) 1.8面Bigfish碰到 (strin ...

  9. struts2 json关于Date日期的解析

    在get方法前加上: @JSON(format="yyyy-MM-dd HH:mm:ss")

  10. maven 命令备忘

    1. 打包时 不执行测试 mvn package -Dmaven.test.skip=true