IM学习-认识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优点
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 核心技术
- 基于XML流传输
- 使用TLS对传输层安全性进行信道加密
- 使用SASL进行简单身份验证和安全层的强身份验证
- 使用UTF-8提供的Unicode支持,并支持国际化i18n;
- 内置了网络状态的信息(如:在线状态)
- 订阅状态可以双向授权
- 启用状态的联系人列表
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亿 | WhatApp使用XMPP的变体为其流行的聊天服务 | |
~2亿 | Nimbuzz软件 | Nimbuzz是一个基于XMPP的即时消息社区。 |
〜100K | ChatMe | 首个具有托管功能的意大利XMPP服务。 |
〜10K | Kontalk | 一种非常用户友好的XMPP服务,使用您的电话号码作为用户ID。服务器和客户端都是FLOSS。 |