基于XMPP的即时通信系统的建立(三)— 程序设计概览
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的即时通信系统的建立(三)— 程序设计概览的更多相关文章
- 基于XMPP的即时通信系统的建立(二)— XMPP详解
XMPP详解 XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理和现场协议)是一种在两个地点间传递小型结构化数据的协议.在此基础上,XMPP ...
- 基于XMPP的即时通信系统的建立 — XMPP IQ详解
XMPP详解 XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理和现场协议)是一种在两个地点间传递小型结构化数据的协议.在此基础上,XMPP ...
- 基于XMPP的即时通信系统的建立(五)— openfire
现决定使用Openfire作为服务端,Openfire采用Java开发,基于XMPP的实时开源协作服务器.单台可支持上万并发用户. Openfire体系结构 Openfire体系由其提供的服务器端.客 ...
- 基于XMPP的即时通信系统的建立(一)— XMPP基础概念
相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用.为了解决即时通信的标准问题,IETF(互联网工程任务组 The ...
- 基于XMPP的即时通信系统的建立(四)— 协议详解
Presence 在XMPP协议中,我们使用presence来获取用户是否已经上线以及是否可以通信的状态. 为了能够知道自己联系人的状态以及让联系人知道自己的状态,用户上线后需要订阅联系人的状态,联系 ...
- 基于XMPP的即时通信系统的建立(六)— 开发环境搭建
服务器端 新建空工程 使用Eclipse新建名为openfire的空java工程. 导入源代码 这里使用的是openfire的openfire_src_3_10_3.zip源码. 导入后将目录src/ ...
- 基于XMPP的即时通信系统的建立(四)— 组件介绍
服务端 服务器 许可证 操作系统 是否支持任意客户端登录 备注 ejabberd 开源 Elang 是 支持虚拟主机和集群 Openfire Apache Java 是 Tigase GPLv3 Ja ...
- Android基于XMPP的即时通讯3-表情发送
这篇博文主要讲表情发送的一些东西. 参考:Android基于XMPP的即时通讯1-基本对话 1.准备好资源文件 采用的是emoji的表情,我打包好了,下载地址:http://files.cnblogs ...
- Android基于XMPP的即时通讯2-文件传输
本文是在上一篇博文Android基于XMPP的即时通讯1-基本对话的基础上,添加新的功能,文件传输 1.初始化文件传输管理类 public static FileTransferManager get ...
随机推荐
- 配置ASP.NET Nhibernate
web.config:配置sql server数据库 <configuration> <configSections> <!--NHibernate Section--& ...
- WebClient
Mircsoft在dotnet1.1框架下提供的向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法.通过这个类,大家可以在脱离浏览器的基础上模拟浏览器对互联网上的资源的访问和发送 ...
- android 开发 实现自动安装
场景:实现自动安装apk程序 注意:不能使用 intent.setDataAndType(Uri.parse(apkPath), "application/vnd.android.pack ...
- 想成为真正的代码gg,目标
转眼已而大二了,可是在这上了一个星期的课,感觉生活非常的茫然.当然这与我处在的环境有一定的关系. 处在这样的学校,想努力可是让我心凉的是没有一个老师肯真心带学生,, 学校办的各种事情都很坑,,我不怕自 ...
- HDU 3974 Assign the task 暴力/线段树
题目链接: 题目 Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- uoj 67 新年的毒瘤 割点
题目链接: 题目 #67. 新年的毒瘤 问题描述 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用 nn 个结点 mm 条无向边的无向图表示.这个图中有 ...
- DevExpress控件使用系列--ASPxTreeList
控件功能 结合列表控件及树控件的优点,在列表控件中实现类型树的多层级操作 官方说明 http://documentation.devexpress.com/#AspNet/clsDevExpres ...
- pos机套现是怎么回事
POS机是商家为了促进消费,向银行申请的刷卡机它的主要功能是转账就是通过客户的刷卡,把相对的金额转入商户的帐户银行会根据笔数或金额向商户收取手续费非法套现就是客户并未和商户产生贸易往来,单纯通过pos ...
- 【面试题030】最小的k个数
[面试题030]最小的k个数 题目: 输入n个整数,找出其中最小的k个数. 例如输入4.5.1.6.2.7.3.8这8个字,则其中最小的4个数字是1.2.3.4. 思路一: ...
- Asp.net MVC4.0自定义Html辅助方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...