xmpp+openfire

前言

相信移动端开发的同学,或多或少都了解或者开发过及时通讯类或者有及时通讯功能的项目,目前独立开发来说比较常用的是基于socket,多数情况的快速开发都会选择集成第三方的IM库,如融云,环信等等,下面我要给大家介绍另一种IM的实现方式,基于xmpp协议,服务器采用openfire,客户端使用开源的XMPPFramework的方式实现即时通信

知识背景

XMPP相关

1. 什么是XMPP ?

XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分; 核心的XML流传输协议 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。

2. XMPP的基本网络结构是怎样的?

XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

3. XMPP通过TCP传什么了?

传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。

4.XMPP协议工作原理

所有从一个client到另一个client的消息和数据都要通过xmpp server
1.client连接到server
2.server利用被顶目录系统的证书对其认证
3.client指定目标地址,让server告知目标状态
4.server查找,连接并进行互相认证
5.client间进行交互

5. XMPP协议地址格式

统一的JID(jabber identifier)
JID = name@domain/resource
其中name为用户名,domain为服务器名称,resource属于用户的位置或设备
例如: zhengzhijian@127.0.0.1/iphone

6. XMPP消息格式:
WechatIMG143.png

presence:元素确定用户的状态
message:用于两个用户之间发送的信息
iq:信息/请求,是一个请求-响应机制,管理xmpp服务器上两个用户的转换,允许他们通过响应的xml格式的查询和响应

7. XMPP系统特点:

(1)客户机/服务器通信模式
(2)分布式网络
(3)简单的客户端
(4)XML的数据格式

8、 xmpp 协议缺点

数据负载太重:随着通常超过 70%的 XMPP 协议的服务器的数据流量的存在和近60%的被重复转发,XML的数据格式,相对较重
没有二进制数据: XMPP 协议的方式被编码为一个单一的长的 XML 文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的 HTTP。

openfire相关

1.什么是openfire

您可以使用它轻易的构建高效率的即时通信服务器.
openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.

环境配置

配置openfire

1.首先官网下载openfire openfire官网,并根据自己的计算机系统进行下载

WeChat9d80c8786067cdea962160c74049ce66.png

例如我是macos,安装好后再系统偏好设置中,开启openfire服务器并进行配置


image.png
image.png

如果macos下不能正常开启,可以尝试用命令行开启(我就是因为点击开启,偏好设置直接崩溃,所以尝试的命令行开启),开启的前提是本机需要安装java环境,注意自己本机的java环境的版本
java环境配置教程

用命令行的方式开启openfire

1. sudo chmod -R 777 /usr/local/openfire/bin  来取得文件夹权限
a:sudo su

b: cd /usr/local/openfire/bin

c:export JAVA_HOME=`/usr/libexec/java_home`

d:echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

e:   cd /usr/local/openfire/bin

f:   ./openfire.sh
WeChat0da447d017728b005bbd56d606651308.png

如果还有openfire启动问题可参考openfire配置常见问题

2.配置openfire服务器
如果openfire开启成功,可以在偏好设置中进行配置

  • 2.1配置语言


    image.png
  • 2.2配置为127.0.0.1即可


    image.png
  • 2.3配置数据库


    image.png
image.png

验证本地是否有简历的openfire数据库,可以执行以下命令
注:Mac安装mysq,里面有更为详尽的配置

alias mysql=/usr/local/mysql/bin/mysql   //输入alias命令
mysql -u root -p  //连接数据库,之后要输入root的密码
show databases; //查询已创建的数据库(将进入了mysql下,命令有分号)
image.png
  • 2.4设置管理员邮箱和登录密码即可


    image.png
  • 2.5登录openfire管理后台即可,默认的用户名admin,密码为上一步中设置的密码


    image.png
  • 2.5登录成功进入后台,如下图


    image.png
  • 2.6我们尝试创建一个用户,并且使用openfire官网提供的spark进行登录,看看是否可以正常登录,如图我们创建了一个iOScoderZZJ的用户,spark也可以再openfire官网下载


    image.png

    image.png
  • 2.7登录验证下是否配置成功,在spark上进行登录,验证流程是否全部正确,如果登录的时候有证书验证的问题,可以参考文章Spark 连接证书失效解决方法

    image.png

  • 2.8登录成功后,并且刷新openfire后台


    image.png

    image.png
  • 2.9卸载openfire

sudo rm -rf /Library/PreferencePanes/Openfire.prefPanesudo 

sudo rm -rf /usr/local/openfiresudo 

sudo rm -rf /Library/LaunchDaemons/org.jivesoftware.openfire.plist

xmppframework大致连接流程


image.png

sdk相关
安卓smack
iOS XMPPFramework

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容

  • XMPP简介 XMPP协议简介 XMPP协议(Extensible Messaging and PresenceP...
    不规则先生阅读 6,307评论 2 31
  • 关于XMPP最权威的讲解:http://www.jabbercn.org/RFC3920(这个才是最权威的,下面文...
    随风飘荡的小逗逼阅读 1,491评论 1 5
  • 前面关于即时通讯基础Socket,大家学习使用XMPP之前可以先看看即时通讯系列之Socket简介 前言 前段时间...
    音符上的码字员阅读 4,238评论 3 16
  • 一、即时通讯技术 即时通讯技术(IM -- Instant Messaging)-> 支持用户在线实时交谈 有许多...
    iOS_成才录阅读 8,479评论 10 76
  • XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。X...
    不规则先生阅读 718评论 0 1