iOS 即时通信系列之XMPP搭建本地服务器
说明:本文主要阐述如何使用XAMPP、Openfire工具基于XMPP搭建本地服务器、实现即时通信。
即时通信
-
什么是即时通信?
即时通信(instant message,IM)是指能够即时发送和接收互联网消息等的业务。它是目前Internet上最为流行的一种通讯方式。即时通讯有多种实现方式,例如:XMPP、环信、融云等。本文则对XMPP的使用进行介绍。
XMPP
-
什么是XMPP?
XMPP(XML,Messages,Presence,Protocol)是可扩展通讯和表示协议,基于XML(可扩展标记语言),可用于即时通信(IM)。相比其余三种IM协议(IMPP、PRIM、SIMPLE),XMPP最为灵活。它是基于XML的协议,继承了在XML环境中灵活的发展性,所以基于XMPP的应用具有超强的可扩展性。
-
XMPP的优点
1.开放:XMPP协议是自由、开放、公开的,并且易于了解。 而且在客户端、服务器 、组件 、源码库等方面,都已经各自有多种实现。
2.标准:互联网工程工作小组( IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的实时通信及Presence技术。 而XMPP的技术规格已被定义在RFC 3920及RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。
3.证实可用:第一个Jabber(现在XMPP)技术是Jeremie Miller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。 今日的互联网上有数以万计的XMPP服务器运作着,并有数以百万计的人们使用XMPP实时传讯软件。
4.分散式:XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。 任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验。
5.安全:任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自带于核心XMPP技术规格中。
6.可扩展:XML 命名空间的威力可使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展由XMPP标准基金会。
7.弹性佳:XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
8.多样性:用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。
-
XMPP的缺点
- 数据负载过重:随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。 新的议定书正在研究,以减轻这一问题。
- 没有二进制传输:XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。 因此, 文件传输协议一样使用外部的HTTP。 如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。 至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。
XMPP实现即时通信
-
条件与工具
-
条件
实现即时通信至少需要一个服务器端、两个客户端。下面我们准备需要的环境:XMPP服务器、XMPP客户端(辅助调试)。
-
工具
辅助工具:XAMPP、Openfire、spark、JDK(也可以去XMPP官网下载使用别的工具)
-
XMPP服务器搭建
-
XAMPP
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。是一个易于安装且包含MySQL、PHP和Perl的Apache发行版,非常容易安装和使用,只需下载(Mac版)、解压缩、启动即可。
Step 1.pngStep 2.png
Step 3.png
Step 4.png
Step 5.png
Step 6.png
接下来我们先对Openfire进行配置。
-
Openfire
Openfire采用Java开发,是开源的实时协作(RTC)服务器,基于XMPP(Jabber)协议。其安装和使用都非常简单,利用Web进行管理。单台服务器可支持上万并发用户。因为Openfire服务是基于JAVA语言写的,所以电脑必须要有java运行环境,需要安装JDK成功后才能进行Openfire的安装。
下载Mac版JDK(下载JDK_8u101_macosx_x64_8.0.1010.13),安装过程就不在此累述,如果不会安装可以点击JDK安装教程。
下载Mac版Openfire(下载Openfire_4_0_2) ,安装成功时候我们可以在电脑的系统偏好设置里面打开这个软件。
Openfire.png Install Success.png点击打开, Status显示Running表示服务器打开可以运行;
Openfire Running.png点击Open Admin Console 打开Openfile的控制平台进行相关配置选择->简体中文点击-> Continue
Openfire Step 1.png域名使用127.0.0.1(本机作为服务器)
Openfire Step 2.pngOpenfile需要链接一个数据库来存储我们的账号信息,以及聊天的记录
Openfire Step 3.png前往文件夹:/usr/local 右击Openfile->显示简介,将其访问权限改成->读与写;
Change The Read And Write Access.png点击resource->database,可以看到database下有个openfile_mysql.sql文件,这个文件就是我们接下来要用的,粘贴到桌面以备使用;回到XAMPP中的Step 6单击phpMyAdmin,进入到XAMPP操作界面创建并导入数据库;
XAMPP Inport DataBase.png单击执行,导入成功后我们会发现Test_XMPP数据库里面有34张表;
XAMPP Increase In 34 Table.png然后回到Openfile配置页面将【host name】改为127.0.0.1,【database-name】改为Test_XMPP,之后按提示设置并填写信息;
Setting User And Password.png Finish Install.png登录到管理控制平台可以查看服务器的相关信息;
Openfire Server.png-
XMPP客户端环境搭建
上面通过XAMPP和Openfire搭建了一个服务器,接下来通过spark(Mac版spark_2_7_7下载)进行辅助调试。XMPP系统的一个设计标准是必须支持简单的客户端。事实上XMPP系统架构对客户端只有很少的几个限制,一个XMPP客户端必须支持的功能有:
1. 通过TCP套接字与XMPP服务器进行通信;
2. 解析组织好的XML信息包;
3. 理解消息数据类型。
所以,只要客户端满足上述三个功能,就可以实现基于XMPP的即时通信。
安装完spark后,通过账户创建一个新的账户进行登入,可以从服务器(用户/组)看到,新创建的账户处于在线状态,而admin账户由于没有登入,所以就处于离线状态。
除了spark,我们还可以在XMPP官网下载Adium等客户端软件进行调试,其实Mac自带的iMessage也能调试,只要客户端满足之前所述XMPP客户端所必须支持的三个功能,那么任何两个客户端都能够实现即时通信;接下来我们就实现下iMessage和spark之间进行即时通信;
打开iMessage->添加账户->其他“信息”账户->继续;在账户类型里选择Jabber(注:XMPP前身),用户名填写格式为:用户名@服务器名称,服务器名称可以在服务器的属性查看,填入密码,勾选“自动查找服务器和端口”,点击登入;登入之后我们可以添加一个在spark中登入的账户,添加之后就可以进行通话了,效果如下图所示
上面是客户端与客户端通信,接下来通过服务器给所有在线客户打招呼!
Server Send Message.png客户端接收到的消息。
Client Receiver Message.png好了,Openfire服务器的搭建及客户端环境的搭建就告一段落了,相信看到这里,你已经对基于XMPP的即时通信有了大概的了解,在下一篇中将实现在iOS工程中加入XMPP实现登入、注册、聊天,有兴趣的话可以去看看。
总结
- 基于XMPP的8大特性(开放、标准、证实可用、分散、安全、可扩展、弹性佳、多样性),被开发出基于XMPP的软件越来越多;
- XMPP客户端需要支持的功能:
1).通过TCP套接字与XMPP服务器进行通信;
2).解析组织好的XML信息包;
3).理解消息数据类型。
联系作者:简书·DH_Fantasy 新浪微博·DH_Fantasy
版权声明:自由转载-非商用-非衍生-保持署名(CC BY-NC-ND 3.0)