首页 > 代码库 > iOS_32_XMPP环境搭建

iOS_32_XMPP环境搭建


?即时通讯技术(IM)支持用户在线实时交谈。

?IM系统最大的区别在于各自通讯协议的实现
所以即时通讯技术的核心在于它的传输协议

?协议用来说明信息在网络上如何传输,
目前已经出现过的IM协议包括:
IETF的对话初始协议(SIP)和即时通讯对话初始协议和表示扩展协议(SIMPLE)、
应用交换协议(APEX)、
显示和即时通讯协议(PRIM)
基于XML且开放的可扩展通讯和表示协议(XMPP
XMPP又常称为 Jabber协议


?XMPP是基于XML的协议。

?XMPP前身是Jabber1998年)
是一个开源组织定义的网络即时通信协议
?XMPP是一个分散型通信网络,任何XMPP用户都可以向其他任何XMPP用户传递消息。
多个XMPP服务器也可通过一个专门的“服务器-服务器”协议相互通信,


?XMPP是一种基于XML的协议是可扩展的
可以通过发送扩展的信息来处理用户的需求,
以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。
而且,XMPP包含了针对服务器端的软件协议
使之能与另一个进行通话,
这使得开发者更容易建立客户应用程序或给一个配置好的系统添加功能
?XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。
?XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的

?XMPP的扩展协议Jingle使得其支持语音和视频
?XMPP的官方文档时RFC 3920



?XMPP:The Extensible  Messaging and Presence Protocol(可扩展通讯和表示协议)
?XMPP可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输
XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议
?XMPP是基于XML的协议,用于即时消息(IM instant message)以及在线现场探测
促进服务器之间的准即时操作。





?XMPP是一个典型的C/S架构,
大多数情况下,当两个客户端进行通讯时,
他们的消息都是通过服务器传递的。
采用这种架构,主要是为了简化客户端,
将大多数工作放在服务器端进行

?XMPP中定义了三个角色,
客户端,服务器,网关
通信能够在这三者的任意两个之间双向发生

?服务同时承担了客户端信息记录,
连接管理和信息的路由功能

?网关承担着与异构即时通信系统的互联互通,
异构系统可以包括SMS(短信),MSN,ICQ等

?基本的网络形式是单客户端通过TCP/IP连接到单服务器
然后在此连接之上传输XML


通讯步骤:
1.节点连接到服务器
2.服务器利用本地目录系统中的证书对其认证
3.节点指定另一个目标节点地址,让服务器告知其状态
4.服务器查找、连接并进行相互认证
5.节点之间进行交互



?XMPP应用传输的是与即时通讯相关的指令

?XMPP的协议形式变成了XML格式的纯文本

?XMPP的核心部分就是一个在网络上分片段发送XML的流协议
这个流协议是XMPP的即时通讯指令的传递基础
也是一个非常重要的可以被进一步利用的网络基础协议
?XMPPTCP传的是XML
?缺点:数据量大,没有二进制传输
?XMPP是一种类似于HTTP协议的一种数据传输协议,
其过程就如同“解包装--〉包装”的过程。
只需要理解其接收的类型及返回的类型,
便可以很好的利用XMPP来进行数据通讯

?XMPP官方网站——xmpp.org




?可用服务器地址:xmpp.org/xmpp-software/servers/
NamePlatform(s)LicenseDetailsLatest Release
Apache VysperWindows / LinuxApache License Version 2.0mina.apache.org2011-02-23
CitadelLinuxGPL3citadel.org2013-08-14
CommuniGate ProLinux / Mac OS X / WindowsCommercialcommunigate.com2013-09-10
Coversant SoapBox ServerWindowsCommercialcoversant.comunknown
djabberdLinuxGPL3danga.com2011-06-13
ejabberdLinux / Mac OS X / Solaris / WindowsGPL2process-one.net2013-06-28
IceWarpLinux / WindowsCommercialicewarp.com2012-12-11
iChat ServerMac OS XCommercialapple.com2012-07-25
in.jabberdLinuxGPL2inetdxtra.sourceforge.net2013-05-16
Isode M-LinkLinux / Solaris / WindowsCommercialisode.com2013-06-24
jabberd 1.xLinuxGPL2jabberd.org2012-06-28
jabberd 2.xLinux / Solaris / WindowsGPL2jabberd2.org2012-08-26
Jabber XCPLinux / Solaris / WindowsCommercialcisco.com2008-10-31
Jerry MessengerLinux / WindowsCommercialj-livesupport.comunknown
KwickserverWindowsGPLkwickserver.info2010-10-15
Metronome IMLinux / Mac OS XISC/MITlightwitch.org/metronome2013-10-02
MongooseIMLinux / Mac OS XGPL2erlang-solutions.com2013-05-23
OpenfireLinux / Mac OS X / Solaris / WindowsApacheigniterealtime.org2013-05-28
Oracle Communications Instant Messaging ServerLinux / Solaris / WindowsCommercialoracle.com2013-05-07
Prosody IMLinux / Mac OS X / WindowsMIT/X11prosody.im2013-09-10
psycedLinux / Mac OS X / WindowsGPL2psyced.org2011-11-22
Siemens OpenScapeLinuxCommercialsiemens-enterprise.com2011-12-15
TigaseLinux / Solaris / Mac OS X / WindowsAGPLtigase.org2013-04-24
VinesLinux / Mac OS XMITgetvines.com2013-06-22
WokkelLinux / Solaris / Mac OS XMITwokkel.ik.nu2013-01-12


?Openfire简介
–采用Java开发,
开源的实时协作(RTC)服务器,
基于XMPP(Jabber)协议
–可以轻易的构建高效率的即时通信服务器
–安装和使用简单,并利用Web进行管理
单台服务器可支持上万并发用户


下载完成后,如图

一、下载完成后,打开安装包,双击Pkg文件,开始安装

?下载并安装:http://www.igniterealtime.org/projects/openfire/index.jsp

?安装位置:/usr/local/openfire/

?安装位置该文件夹的用户访问权限需要手动修改

?数据库脚本保存在/usr/local/openfire/resources/database文件夹下

?将openfire_mysql.sql第59行的字段类型修改为VARCHAR(255)

安装成功


目录禁止访问,需要手动添加当前用户帐号




二、安装完成后,打开系统偏好


如果终始无法开启open fire,说明其依赖的JDK环境没有安装


三、进入/usr/local文件夹,修改openfire目录权限 (右键,显示简介)




添加当前帐号用户,并为其赋予读写权限


修改为读写权限 ,并再次上锁


此时,可以访问openfire文件夹了


四、若想成功启动Openfire,还需要安装JDK环境(200M左右)
JDK7下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
JDK8下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

查看机器上是否安装了JDK,bash终端中输入:         java -version  回车
查看机器上的版本:ls -la /System/Library/Frameworks/JavaVM.framework/Versions/
JDK的安装目录为:/Library/Java/JavaVirtualMachines,里面有所有安装的JDK



查看系统是32还是64位的方法:
打开终端,在应用程序的工具下,输入代码:
ioreg -l -p IODeviceTree | grep "firmware-abi" | sed -e ‘s/[^0-9A-Z]//g‘    
回车  EFI64或者EFI32代表你的机器支持64或者32位的



判断系统里是否已经安装 gcc编译器的方法是:
打开一个终端,输入命令 g++
没有则输出command not found
若安装了则输出 not input files 


Mac版本 Eclipse下载(仅标记非必需
http://www.eclipse.org/downloads/?osType=macosx&release=undefined
http://dl.google.com/android/studio/install/0.8.0/android-studio-bundle-135.1245622-mac.dmg














安装好JDK之后,就可正常打开openfire了


二、点击上图的【open admin console】配置openfire服务器

1.设置语言,选中文,端口默认【9090】



2.主机设置

设置主机的访问ip地址

域名:主机名.local    比如:beyonddemacbook-pro.local


注意:域不能是机器名,否则会如下错误:

HTTP ERROR: 500 INTERNAL_SERVER_ERROR

本地的域,要设置为127.0.0.1

3.数据库设置

设置外部数据库(推荐,比如:MySQL),选择标准数据库连接,需提前安装,请参照上一篇


4.设置数据库连接 【前提是在数据库中新建好一个库】

?create  database   openfire;
?#修改数据库字符集
?alert  database openfire  default character set = utf8;
?#切换数据库
?use openfire
?#执行数据库脚本创建数据表
source /usr/local/openfire/resources/database/openfire_mysql.sql


进入openfire安装目录  /usr/local/openfire/resources/database/ 【如果提示没有权限,被拒绝,参照上面的做法】


再次进入mysql,

?使用openfire database
执行:source /usr/local/openfire/resources/database/openfire_mysql.sql





至此,前面数据库就配置好,可以继续配置openfire了


附其他库的URL固定写法及端口号





(1)数据库驱动选择:MySQL,前提是已安装MySQL(具体的安装方法可以参考上一篇:mac上安装MySQL)

(2)JDBC驱动,默认不变

com.mysql.jdbc.Driver

(3)数据库URL:

形式如下:

jdbc:mysql://你的主机名:端口号/数据库名称

这里设置为

jdbc:mysql://localhost:3306/openfire
jdbc:mysql://localhost:3306/openfire?rewriteBatchedStatements=true

其中主机名[host-name]改为localhost

其中数据库名称[database-name]改为openfire (自己在mysql手动建立的库)

解决数据库字符编码问题,可以在后面加

?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

最终的url形式是

jdbc:mysql://localhost:3306/openfire?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

注意:前提是已存在一个名为openfire的数据库,否则会报如下错误,连接配置不成功

The Openfire database schema does not appear to be installed. Follow the installation guide to fix this error. 

前期的MySQL数据库准备工作如下:

<1>设置/usr/local/openfire文件夹的访问权限为可读写

方法1:在finder中前往文件夹/usr/local/,右键openfire文件夹,显示简介

点击如图右下角中的锁图标解锁,并设置权限为:可以读写

方法2:打开终端,输入如下命令

sudo chmod 777 /usr/local/openfire

其中777表示授权可读写权限,000表示无访问权限,(具体的含义可以参考上一篇:mac的终端命令

<2>在终端中,登陆MySQL

mysql -u root -p

然后输入数据库的root密码

<3>创建数据库openfire

create database openfire;
use openfire;
alertdatabase openfire default character set = utf8;

<4>导入openfire资源文件夹 resources/database下的数据表

use openfire;
source /usr/local/openfire/resources/database/openfire_mysql.sql

 在终端出现一排导入过程


 <5>刷新权限

flush privileges;

<6>退出MySQL

exit

(4)用户名和密码

这里的用户名密码,是访问MySQL数据库时使用的帐号:root,和安装MySQL设置的root密码

5.继续设置openfire的特性

如果不打算使用LDAP,则保持默认设置


 6.设置openfire服务器管理员的帐号和密码

管理员:admin@beyond.com

密码:123456

123456


可以随便填写一个管理员邮箱,输入要设置的密码

完成注册


 

7.登陆管理控制台

 

默认的管理员帐号是“admin”,默认管理员密码“admin”,如果上面最后一步设置了新密码,则管理员密码是新密码123456

 


 

如果想去掉默认的admin帐号,并自定义,需要如下操作

 

(1)在终端中,登陆具体的数据库(openfire)

 

mysql -u root -p openfire

 

然后输入数据库的root密码

 

(2)删除表“ofUser”中的admin帐户

 

delete from ofUser where username=admin;

 

(3)创建自定义管理员(用户名:admin,密码:123456)

 

INSERT INTO ofUser (username, plainPassword, encryptedPassword, name, email, creationDate, modificationDate) VALUES (admin,123456‘,e10adc3949ba59abbe56e057f20f883e,Administrator,admin@beyond.com,‘001410251606152‘,0);

  注意:如果重设了用户名,必须重启openfire服务器 

三、卸载openfire

1.停止服务

在系统偏好设置的其他里,打开openfire偏好设置

点击Stop Openfire按钮,停止服务

2.删除文件

打开终端,输入以下命令

sudo rm -rf /Library/PreferencePanes/Openfire.prefPane
sudo rm -rf /usr/local/openfire
sudo rm -rf /Library/LaunchDaemons/org.jivesoftware.openfire.plist

其中第一条命令之后,需要输入本机管理员密码

3.如果想要重新安装openfire

打开终端,输入以下命令,打开openfire.xml,找到setup节点后 将值改为false,并drop掉openfire database


















iOS_32_XMPP环境搭建