XMPP与HTTP的比较

XMPP的优势

Ÿ   1. 推送数据

HTTP只能从服务器哪里请求数据,除非服务器正在响应客户端请求,否则不能向客户端发送数据。但XMPP连接是双向的,任何一方在任何时候都可以向另外一方发送数据,只要连接是打开状态。

Ÿ   2. 防火墙友好

XMPP对防火墙和NAT友好,因为服务器到客户端的连接是由客户端发起的,一旦连接,服务器就可以将其所需要的数据推送给客户端。

Ÿ   3. 增强的安全性

XMPP构建在TLS和SASL上,具有更好的安全性

Ÿ   4. 更加丰富的工具箱

XMPP支持更多的操作

XMPP的不足

Ÿ   1. XMPP是有状态协议

Ÿ   2. XMPP的生态系统较小

Ÿ   3. XMPP有更大的开销

XMPP未对短期会话和简单请求进行优化,建立、维护和销毁XMPP都需要一些资源。

对于更长的连接和更加复杂的交互,XMPP和HTTP的开销可以忽略不计。

桥接XMPP与Web

主流浏览器暂时没有支持XMPP协议,但是可以通过设置和编程在HTTP连接上建立高效的XMPP会话通道。

这种通道的建立使用到了名为HTTP长连接的技术。通过联合使用一个简单的基于HTTP的管理协议以及XMPP连接管理器,我们可以将XMPP(所有功能)带入到HTTP应用程序中。

长轮询

是早期定时刷新网页获取数据更新的方法改进,服务端通过维持一个空连接,即时通知客户端数据变更。

因为每个请求均可以持续较长时间,因此称为长轮询。

人们已经设计了多个库和协议来利用长轮询技术,XMPP是其中一个较早实现,在XMPP中,这种桥接被称为BOSH(Bidirection stream Over Synchronous HTTP,在同步HTTP上传递双向数据流)。

管理连接

XMPP连接可以持续相当长的时间,但HTTP请求确相当短。连接管理器负责维护第三方的XMPP连接并通过HTTP长连接技术提供对连接的访问。

浏览器和连接管理器都使用BOSH协议通过HTTP通信,并提供了安全功能,连接管理器与服务端通信就像一个普通的客户端一样,延时也比较低。

而且连接管理器还有如下的优势:

Ÿ   客户端可以切换网络

Ÿ   托管稳固,可以容忍故障

Ÿ   可好性好,连接管理器缓存数据

Ÿ   对防火墙友好(运行与HTTP端口)

让Javascript理解XMPP协议

通过Javascript的Strophe库来实现,可以隐藏底层细节并具有很好的效率。

构建XMPP应用程序

Ÿ   浏览器平台

可以选用jQuery操作用户数据及用户界面。

Ÿ   XMPP服务器

可以选用Tigese或者OpenFire

Ÿ   协议扩展

如果有扩展协议的需求,应该首先试着组合现有协议或者将协议设计的尽量简洁。

基于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的即时通信系统的建立(五)— openfire

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

  4. 基于XMPP的即时通信系统的建立(一)— XMPP基础概念

    相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用.为了解决即时通信的标准问题,IETF(互联网工程任务组 The ...

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

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

  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的即时通讯3-表情发送

    这篇博文主要讲表情发送的一些东西. 参考:Android基于XMPP的即时通讯1-基本对话 1.准备好资源文件 采用的是emoji的表情,我打包好了,下载地址:http://files.cnblogs ...

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

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

随机推荐

  1. md RAID

    md: mdadm: 将任何块设备做成RAID 模式化的命令:1.创建模式 -C 专用选项: -l: 级别 -n #: 设备个数 -a {yes|no}: 是否自动为其创建设备文件 -c: CHUNK ...

  2. 使用了非标准扩展:“xxx”使用 SEH,并且“xxx”有析构函数

    如果一个函数内使用了异常处理机制, VC 编译器在编译该函数时,它会给此函数插入一些“代码和信息”(代码指的是当该函数中出现异常时的回调函数,而信息主要是指与异常出现相关的一些必要的链表),因此每份函 ...

  3. (一)、http原理

    谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>,文中介绍了在使用HTTPS进行网络加密传输的一些情况,从回复来看,争议还是有的.随着网络越来越普及,应用越来越广泛,一 ...

  4. ARRAY_SIZE宏

    宏ARRAY_SIZE,是求设备结构体中设备的个数,   定义在linux/kernel.h中   #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[ ...

  5. nginx模块开发(18)—日志分析

    1.日志简介 nginx日志主要有两种:访问日志和错误日志.访问日志主要记录客户端访问nginx的每一个请求,格式可以自定义:错误日志主要记录客户端访问nginx出错时的日志,格式不支持自定义.两种日 ...

  6. C# DataTable转换成DataRow

    linq中的cast<T>()及OfType<T>() DataTable dt=...........//获取从数据库中取出的数据(假设只有一条记录) //Cast<T ...

  7. Win7-其中的文件夹或文件已在另一个程序中打开

    Win7-其中的文件夹或文件已在另一个程序中打开 如何解决Win7系统在删除或移动文件时提示,“操作无法完成,因为其中的文件夹或文件已在另一个程序中打开,请关闭该文件夹或文件,然后重试”.   步骤阅 ...

  8. 日期工具类TimeUnit

    import java.util.concurrent.TimeUnit; 2 3 public class TimeUnitDemo { 4 private TimeUnit timeUnit =T ...

  9. 重写equals()方法时,需要同时重写hashCode()方法

    package com.wangzhu.map; import java.util.HashMap; /** * hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,<br/&g ...

  10. ibatis框架文件配置

    最近2天在学ibatis,心里也有一些心得,就把它写下来了. 首先是配置一下ibatis的环境,添加ibatis2.X.jar,mysql-connection-bin.5.1.8.jar,建立一个w ...