• 学习XMPP就是拥有位当前应用程序添加实时,推送,社交功能所需的工具。虽然浏览器不支持XMPP通讯,但是我们可以通过BOSH技术解决。
  • 一个XMPP网络包含如下

服务器:为XMPP节提供路由,是否支持server-Server通讯也是很重要的特性,常见的服务有openfire,tigase,m-link等

客户端:一般为人类驱动的实体,也可以是自动化的机器人实体(聊天机器人)

组件:XMPP扩展(XEP-0114)使用该扩展协议可以实现服务实现无关的扩展,组件作为服务器内部可单独寻址的实体

插件:特定服务实现下的扩展,不大可能会移植

  • XMPP寻址

JID:格式     节点@域/资源

  • XMPP节

XMPP通讯是以XML为基础,研究XMPP协议的话必须要了解他的一些基础元素和属性

xmpp流由两份xml组成,通讯的每个方向都有一份,根元素为stream:stream

子元素为可路由的节点和与流相关的顶级元素,通用元素

presence 相关出席信息

message 消息

iq 信息与查询

  • XMPP连接的生命周期 具体可以看标准协议RFC-6120
  • 如何在web中使用xmpp

以前更新数据使用定时刷新,使用AJAX改善了体验,实质上没有变化。我们可以使用长轮询技术(客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求,ie上用iframe,别的浏览器用xhr来实现)达到更实时的更新效果。XMPP中这种技术,被称之为BOSH,其实Comet和反向http也是类似的东西。很多xmpp服务器中内置该功能,也有单独的BOSH连接管理服务BOSH帮助http客户端建立一个新的XMPP会话,然后把XMPP节包装到一个特殊的body元素通过http回传,这样一来http应用程序就可以控制一个真正的xmpp会话,由于长轮询的高效率和低延迟,因此其效果和原生TCP连接差不多。

使用长轮询技术需要使用js进行跨域访问,目前我们通过Strophe的JS类库实现了轻松优雅的在http下访问xmpp

XMPP作为一个工具的意义的更多相关文章

  1. 使用 XMPP 构建一个基于 web 的通知工具——转

    Inserting of file(使用 XMPP 构建一个基于 web 的通知工具.docx) failed. Please try again. http://www.ibm.com/develo ...

  2. java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

    //------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

  3. 写markdown博客如何截图并快速上传到图床——记一个工具插件的实现

    1. 背景 写博客有一个自己的图床是不错的选择,如果不借助工具,在markdown博客中添加图片的步骤如下: 截取图片,保存到本地(得来回点对话框,选择保存路径,选择文件类型,输入文件名). 上传到图 ...

  4. 通过一个工具类更深入理解动态代理和Threadlocal

    动态代理和Threadlocal 一个代理类返回指定的接口,将方法调用指定的调用处理程序的代理类的实例.返回的是一个代理类,由指定的类装载器的定义和实现指定接口指定代理实例调用处理程序最近用到一个工具 ...

  5. 用Java开发一个工具类,提供似于js中eval函数功能的eval方法

    今天在看到<Java疯狂讲义>中一个章节习题: 开发一个工具类,该工具类提供一个eval()方法,实现JavaScript中eval()函数的功能--可以动态运行一行或多行程序代码.例如: ...

  6. 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)

    打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...

  7. Timber(对Log类封装的一个工具)

    Timber(对Log类封装的一个工具) https://blog.csdn.net/hzl9966/article/details/51314137 https://www.jianshu.com/ ...

  8. 在Android系统中修改Android.mk使其同时编译rgb2565和rgb2888(向out/host/linux-x86/bin/下新增加一个工具命令)【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7514559 在Android系统中修改android.mk使其同时编译rgb2565和rgb ...

  9. 有没有一个工具可以帮助查找python的bug和进行静态的代码分析?

    答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个工具可以进行codingstandard检查

随机推荐

  1. RPM包制作教程

    一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...

  2. 【小白的CFD之旅】07 CFD常识

    学了一周的流体力学,小白对于流体力学有了基本的了解,但是流体力学涵盖的内容何其之多,一周的时间怎么可能学得好呢,很多的概念都是模棱两可.为了在一个月之后能够应用CFD,小白又找到了黄师姐. “师姐,看 ...

  3. codevs 1115 开心的金明--01背包

    1115 开心的金明 2006年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 金明今天很开心,家里购 ...

  4. UVALive3902 Network[贪心 DFS&&BFS]

    UVALive - 3902 Network Consider a tree network with n nodes where the internal nodes correspond to s ...

  5. 第22章 java线程(2)-线程同步

    java线程(2)-线程同步 本节主要是在前面吃苹果的基础上发现问题,然后提出三种解决方式 1.线程不安全问题 什么叫线程不安全呢 即当多线程并发访问同一个资源对象的时候,可能出现不安全的问题 对于前 ...

  6. 第12章 Java字符串

    1.什么是Java中的字符串 字符串String并不是一种数据类型,而是一个类对象,在java.lang包中,只不过在默认情况下java都是自动导入的,所以可以直接使用创建一个String对象的方法有 ...

  7. idea如何设置类头注释和方法注释

    CSDN 2016博客之星评选结果公布      [系列直播]算法与游戏实战技术      "我的2016"主题征文活动 详细:idea如何设置类头注释和方法注释 标签: idea ...

  8. jdbc执行Statement接口的步骤

    jdbc执行Statement接口的步骤如下: 1)驱动注册程序: Class.forName(com.mysql.jdbc.Driver); 2)获取连接对象: Connection conn = ...

  9. python-面向对象进阶

    小总结: 面向对象的好处 更容易扩展,提高代码的使用效率,使代码组织性更强.更清晰,更适合复杂项目的开发 封装:把功能的实现细节封装起来,之暴露调用接口  多态:接口的继承 定义:  类  :  模板 ...

  10. BZOJ 1797: [Ahoi2009]Mincut 最小割

    1797: [Ahoi2009]Mincut 最小割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2076  Solved: 885[Submit] ...