IM学习-认识XMPP(二)

 

目录

 

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很好整合;

标签