• 学习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. 用修改hosts的方式来屏蔽某些网站

    首先呢,来自知乎的一些问答:修改 hosts 文件可以上一些墙内屏蔽的网站,其原理是什么? (然而通过增/改hosts的方法来FQ已经失效很久了) 然后呢,也可以通过修改hosts来达到屏蔽某些网站的 ...

  2. [django]django+datatable简单运用于表格中

    使用datatable首先需要下载datatable文件,文件主要包括三个文件夹css,img,js相关文件,在django中如何配置呢? 首先需要在模板中引入datatable文件,格式如下: &l ...

  3. ::before和::after伪元素的用法

    一.介绍 css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类——:hover,:link,:active,:target,:not(),:focus. 常见伪元素——::first-let ...

  4. UVA10048 Audiophobia[Floyd变形]

    UVA - 10048 Audiophobia Consider yourself lucky! Consider yourself lucky to be still breathing and h ...

  5. [备份]破解Xamarin

    [转]试用了一阵子Mono For Android,今天到期了,,囊中羞涩,只好破解. 说是要在vs2013的英文界面下运行破解包,不知道是真是假,下载并安装了一个. 然后又下载了破解包.是个名为xa ...

  6. javascript详解系列-函数表达式

    1.递归 function fact(num){ if(num<1){ return 1; } else{ return num*fact(num-1); } } var author = fa ...

  7. simpleCart的简单使用及配置

    simpleCart的功能就不用解释,购物车,很6.官网上的说明太模糊了,还是GIHUb上的好一点:https://github.com/wojodesign/simplecart-js/ 文章解决问 ...

  8. 初识javascript变量和基本数据类型

    1.1首先,学习使用firebug控制台.设置一下firefox 中的配置选项,以便使控制台中的javascript警告更为严格...以方便我们更好的找出程序中不必要的bug. 1. 在火狐浏览器fi ...

  9. 吉特仓库管理系统-ORM框架的使用

    最近在园子里面连续看到几篇关于ORM的文章,其中有两个印象比较深刻<<SqliteSugar>>,另外一篇文章是<<我的开发框架之ORM框架>>, 第一 ...

  10. 二维码生成Zxing.net DEMO

    Zxing.net是google维护的一个开源项目.用于在.net平台上生成二维码等,当然还有更多其他用途. 用nuget安装命令 install-package zxing.net 然后添加命名空间 ...