基于XMPP的即时通信系统的建立(一)— XMPP基础概念
相关背景
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基础概念的更多相关文章
- 基于XMPP的即时通信系统的建立(二)— XMPP详解
XMPP详解 XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理和现场协议)是一种在两个地点间传递小型结构化数据的协议.在此基础上,XMPP ...
- 基于XMPP的即时通信系统的建立 — XMPP IQ详解
XMPP详解 XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理和现场协议)是一种在两个地点间传递小型结构化数据的协议.在此基础上,XMPP ...
- 基于XMPP的即时通信系统的建立(三)— 程序设计概览
XMPP与HTTP的比较 XMPP的优势 1. 推送数据 HTTP只能从服务器哪里请求数据,除非服务器正在响应客户端请求,否则不能向客户端发送数据.但XMPP连接是双向的,任何一方在任何时候都 ...
- 基于XMPP的即时通信系统的建立(四)— 协议详解
Presence 在XMPP协议中,我们使用presence来获取用户是否已经上线以及是否可以通信的状态. 为了能够知道自己联系人的状态以及让联系人知道自己的状态,用户上线后需要订阅联系人的状态,联系 ...
- 基于XMPP的即时通信系统的建立(五)— openfire
现决定使用Openfire作为服务端,Openfire采用Java开发,基于XMPP的实时开源协作服务器.单台可支持上万并发用户. Openfire体系结构 Openfire体系由其提供的服务器端.客 ...
- 基于XMPP的即时通信系统的建立(六)— 开发环境搭建
服务器端 新建空工程 使用Eclipse新建名为openfire的空java工程. 导入源代码 这里使用的是openfire的openfire_src_3_10_3.zip源码. 导入后将目录src/ ...
- 基于XMPP的即时通信系统的建立(四)— 组件介绍
服务端 服务器 许可证 操作系统 是否支持任意客户端登录 备注 ejabberd 开源 Elang 是 支持虚拟主机和集群 Openfire Apache Java 是 Tigase GPLv3 Ja ...
- Android基于XMPP的即时通讯2-文件传输
本文是在上一篇博文Android基于XMPP的即时通讯1-基本对话的基础上,添加新的功能,文件传输 1.初始化文件传输管理类 public static FileTransferManager get ...
- 【XMPP】基于XMPP的即时通讯解决方案
什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...
随机推荐
- android studio 突然出现Gradle project sync failed 错误
出现: 之前还是好好的,突然就出现Gradle project sync failed 错误,网上原因可能是工具的问题. 解决办法: 重新打开android studio就好了.不知道大家还有其他的 ...
- hibernate中增加annotation @后不提示信息【转】
此文转自:http://blog.knowsky.com/252047.htm 所需要用到的3个jar包分别是: hibernate-annotations.jar ejb3-persistence. ...
- git/github在windows上使用
问题描述: git在Windows上的使用 问题解决: (1)下载安装git http://msysgit.github.io/ 到该网址中下载msgit软件 注: 安装msg ...
- 解决ubuntu中zip解压的中文乱码问题
转自解决ubuntu中zip解压的中文乱码问题 在我的ubuntu12.10中,发现显示中文基本都是正常的,只有在解压windows传过来的zip文件时,才会出现乱码.所以,我用另一个方法解决中文乱码 ...
- Oracle session连接数和inactive的问题记录
Oracle session连接数和inactive的问题记录 http://timnity.javaeye.com/blog/280383 从上周起,服务器Oracle数据库出现问题,用不到半天,就 ...
- hdu 1195 Open the Lock(广搜,简单)
题目 猜密码,问最少操作多少次猜对,思路很简单的广搜,各种可能一个个列出来就可以了,可惜我写的很搓. 不过还是很开心,今天第一个一次过了的代码 #define _CRT_SECURE_NO_WARNI ...
- java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”
/*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三 ...
- PHP中的抽象类与接口
抽象类 php5支持抽象类和抽象方法.类前加 abstract, 此类就成为抽象类,无法被实例化,此类天生就是用来被继承的,给子类提供了一个类的模板; 类方法前加 abstract,是抽象方法,抽象方 ...
- Apache 下SVN项目管理使用说明
Apache 下SVN项目管理使用说明 (1)Apaceh和SVN先要装好. (2)在apache的目录下找到httpd.conf文件,在最后一行增加如下配置 Include conf/svn.pro ...
- JavaWeb项目开发案例精粹-第3章在线考试系统-003Dao层
1. package com.sanqing.dao; import java.util.List; import com.sanqing.po.Student; public interface S ...