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属于用户的位置或设备
例如: [email protected]/iphone

6. XMPP消息格式:
xmpp+openfire_第1张图片
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官网,并根据自己的计算机系统进行下载

xmpp+openfire_第2张图片
WeChat9d80c8786067cdea962160c74049ce66.png

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


xmpp+openfire_第3张图片
image.png
xmpp+openfire_第4张图片
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配置语言


    xmpp+openfire_第5张图片
    image.png
  • 2.2配置为127.0.0.1即可


    xmpp+openfire_第6张图片
    image.png
  • 2.3配置数据库


    xmpp+openfire_第7张图片
    image.png
xmpp+openfire_第8张图片
image.png

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

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


    xmpp+openfire_第10张图片
    image.png
  • 2.5登录openfire管理后台即可,默认的用户名admin,密码为上一步中设置的密码


    xmpp+openfire_第11张图片
    image.png
  • 2.5登录成功进入后台,如下图


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


    xmpp+openfire_第13张图片
    image.png

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

    xmpp+openfire_第15张图片
    image.png

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


    xmpp+openfire_第16张图片
    image.png

    xmpp+openfire_第17张图片
    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大致连接流程


xmpp+openfire_第18张图片
image.png

sdk相关
安卓smack
iOS XMPPFramework

你可能感兴趣的:(xmpp+openfire)