目录

2 XMPP概述

2.1XMPP简介

2.2官方网站

2.3 基本网络结构

2.4 XMPP优点

2.5 XMPP缺点

2.6 XMPP关键技术

2.6.1 核心技术

2.6.2 Jingle

2.6.3 Multi-User-Chat(MUC)

2.6.4 PubSub

2.6.5 BOSH

2.7 基于XMPP的客户端/服务器端/代码库

2.8 常用的XMPP服务器比较


2 XMPP概述

2.1XMPP简介

XMPP的前身是Jabber,一个开源形式组织产生的网络即时通讯,用于即时消息、在线状态、多方聊天、语音和视频呼叫等功能的通过XML数据传输的开放技术;

XMPP已被IETF国家标准组织完成了标准化工作,标准化的两个核心内容:1. 核心的XML流传输协议;2. 基于XMLFreeEIM流传输的即时通讯扩展应用。

支持文本、视频、文件等的传输;

2.2官方网站

官方网站:https://xmpp.org

github地址:https://github.com/xsf/xmpp.org

2.3 基本网络结构

XMPP中定义了3个角色:客户端、服务器、网关;通信能够在这三者的任意两个之间双向发生;

服务器同时承担了客户端信息记录,连接管理和信息的路由功能;

网关承担着与异结构即时通讯系统的互联互通,异结构系统包括SMS(短信)、MSN、ICQ等;

基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后传输XML;

2.4 XMPP优点

参考:https://xmpp.org/about/

1.开放:XMPP协议是自由、开放、公开的,而且在客户端、服务器、服务器组件、源码库等方面都已有多种实现方式;

2.标准:IETF国际标准组织已经对XMPP完成了标准化工作;

3.分布式:XMPP以TCP/IP协议传输XML流文件,没有中央服务器,任何人可以运行自己的XMPP服务器来进行实时通信;

4.安全:任何XMPP服务器都可以与公共网络隔离,并且内核使用了使用SASL和TLS的作为安全传输层协议;

4.可扩展性:继承了XML的可扩展性;

5.灵活性性:XMPP除了可以实现即时通讯的功能,还可以用于网络管理、内容联合、协作工具、文件共享、远程监控、web服务、轻量级中间组件、云计算等;

6.稳定性:第一个Jabber/XMPP技术由Jeremie Miller于1998年开发的,数百名开发人员的不懈努力,现在相当稳定,目前有数万个XMPP服务器,数百万人使用XMPP通过公共服务进行即时消息传递,例如Goog Talk使用XMPP部署的;

2.5 XMPP缺点

1.数据负载太重:通常超过70%的XMPP协议的服务器的数据流量的存在和接近60%的被重复转发。XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。

2.没有二进制数据:至于二进制数据加密会话或图形以嵌入式使用相同的方法;

3.XMPP是基于XML,所以相较于JSON格式数据在数据解析上相对较慢,而且数据传输率小,json不需想xml一样严格的闭合标签;

2.6 XMPP关键技术

2.6.1 核心技术

  1. 基于XML流传输
  2. 使用TLS对传输层安全性进行信道加密
  3. 使用SASL进行简单身份验证和安全层的强身份验证
  4. 使用UTF-8提供的Unicode支持,并支持国际化i18n;
  5. 内置了网络状态的信息(如:在线状态)
  6. 订阅状态可以双向授权
  7. 启用状态的联系人列表

2.6.2 Jingle

Jingle:用于语音、视频、文件传输和其他应用的SIP兼容多媒体的实时传输协议(TCP\UDP/RTP);

Jingle是用于建立p2p会话的XMPP框架,与WebRCT很好整合;

参考:https://xmpp.org/extensions/xep-0166.html#intro

2.6.3 Multi-User-Chat(MUC)

MUC是用于多方信息交换的XMPP扩展,可以进行多用户聊天;

2.6.4 PubSub

PubSub:是订阅功能的协议扩展;

2.6.5 BOSH

BOSH:是“通过同步HTTP的双向流”,通过超文本传输协议(HTTP)进行双向通信的技术,类似与Ajax这样的轮询机制;

2.7 基于XMPP的客户端/服务器端/代码库

  • 客户端
  • 服务器
  • 代码库

2.8 常用的XMPP服务器比较

名字 平台 开源协议 备注
openfire linux、windows、mac Apache,很开放的一种协议 openfire性能较高,单台能够达到30w以上的并发量。集群后,可以无限扩展。代码结构设计很合理,插件式开发,扩展能力强。这个服务器明白了,那么其他服务器的原理大同小异。
ejabberrd linux、windows、mac GPL2协议 它有普通版和商业版,区别是商业版性能更高。但是要使用Erlang语言开发。访问本站的大多数同学应该都没有Erlang经验,如果选择学习这个服务器,对大家理解原理没有帮助。
jabberd 2.x linux、windows GPL2协议 使用C开发,效率高,但是目前没有openfire、ejarbberrd维护好。且C语言开发难度大。
Tigase linux、mac、windows AGPL协议 天生为集群设计,并发性非常高,每秒可以处理50w条消息,简单的集群就可以上千万人在线,但是学习难大。

2.9 基于XMPP实现的项目

有许多项目创建了基于XMPP的即时消息网络。

用户 公司 描述
~8亿 WhatsApp WhatApp使用XMPP的变体为其流行的聊天服务
~2亿 Nimbuzz软件 Nimbuzz是一个基于XMPP的即时消息社区。
〜100K ChatMe 首个具有托管功能的意大利XMPP服务。
〜10K Kontalk 一种非常用户友好的XMPP服务,使用您的电话号码作为用户ID。服务器和客户端都是FLOSS。

2.10 XMPP其他应用

  1. 物联网(loT):XMPP是物联网中使用的比较出色的协议;
  2. 在线游戏:越来越多的游戏使用XMPP进行实时通话聊天;
  3. 社交:XMPP的核心消息传递可以扩展,例如ATOM格式订阅源;
  4. WebRTC:WebRTC是一个免费开源项目,为浏览器或移动应用程序提供通信功能,Jingle是用于建立p2p会话的XMPP框架,与WebRCT很好整合;

IM学习-认识XMPP(二)相关推荐

  1. Programming C# 学习笔记(二) 出发:“Hello World”

    小序:      准备写这章的学习笔记了,啊,Hello World!多么亲切的语句,呵呵,当初学C语言的第一个程序就是输出它, 还记得费了好大劲终于把它输出来时候的那种兴奋感觉,真是让我怀念哦!(然 ...

  2. SVO学习笔记(二)

    SVO学习笔记(二) 这篇文章 稀疏图像对齐 地图点投影(地图与当前帧间的关系) reprojectMap reprojectPoint reprojectCell 特征点对齐中的非线性优化 结尾 这 ...

  3. WPF学习拾遗(二)TextBlock换行

    原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...

  4. C++语言学习(十二)——C++语言常见函数调用约定

    C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...

  5. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    Spring MVC 学习总结(二)--控制器定义与@RequestMapping详解 目录 一.控制器定义 1.1.实现接口Controller定义控制器 1.2.使用注解@Controller定义 ...

  6. Python学习笔记(二):标准流与重定向

    Python学习笔记(二):标准流与重定向 - SamWei - 博客园 Python学习笔记(二):标准流与重定向 Posted on 2012-02-19 22:36 SamWei 阅读(176) ...

  7. Emgu-WPF学习使用-识别二维码的位置

    原文:Emgu-WPF学习使用-识别二维码的位置 参考链接:http://blog.csdn.net/gaobobo138968/article/details/47663607 我完全参照该链接实现 ...

  8. pytorch学习笔记(二):gradien

    pytorch学习笔记(二):gradient 2017年01月21日 11:15:45 阅读数:17030

  9. opencv学习笔记(二):基于肤色的人手检测

    opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...

  10. Tensorflow深度学习之十二:基础图像处理之二

    Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474   首先放出原始图像: ...

最新文章

  1. Redis的安装、配置 --转载
  2. Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp + 输出方案
  3. 直接访问WEB-INF目录下的JSP页面的方法
  4. 技术开发者应该如何构建小团队的微服务方案?
  5. Windows下基于IIS服务的SSL服务器的配置
  6. PO、VO、BO、DTO、POJO、DAO之间的关系
  7. jxl读数据库数据生成xls 并下载
  8. 自定义TextView显示指定行数
  9. 【转载】GridView自动排序
  10. kvaser怎么用?Kvaser 汽车CAN通讯协议总线分析仪新手入门常见问题解决方案教程
  11. lightbox使用
  12. pycharm安装open3d的方法
  13. 毕业设计:实现电脑识别魔方颜色
  14. 关于前几天的招聘,我说几点
  15. win10彻底永久关闭自动更新【亲测有效】
  16. C# 切换中英文输入法
  17. 2020年9月PAT甲级满分必备刷题技巧
  18. SpringCloud[01]Eureka服务注册与发现
  19. HTML img标签识别base64图片格式
  20. (附源码)ssm基于微信小程序的社区老人健康管理服务系统的设计与实现 毕业设计 011513

热门文章

  1. 实验三 字符类型及其操作(新)
  2. Android-关于启动不了Android Device Monitor
  3. 综合 | 分工,方法学可讨论的点
  4. 电子设计(7)3.3V和5V串口通信电平转换电路(超详细,超简单)
  5. mount/umount 详解
  6. Linux mount umount 的理解
  7. 一卡通+智慧化工厂,实现对化工厂人员定位的管理-新导智能
  8. Linux性能学习(2.3):内存_为什么分配的内存比申请的内存大16个字节
  9. C# 开发微信公众号现金红包发送,解决IP地址非你在商户平台设置的可用IP地址和”未能创建 SSL/TLS 安全通道“ 问题
  10. MySql数据库相关小知识