XMPP

一、说明

XMPP :Extensible Messaging and Presence Protocol,以Jabber协议(XMPP协议前身)为基础;XMPP协议基于可扩展标记语言XML,建立TPC/IP连接,完成C/S、C/C、S/S之间的数据传输。XMPP是一个消息传输国际化标准协议。最初,XMPP作为一个框架开发,目标是支持企业环境内的即时消息传递和联机状态应用程序。 XMPP前身是Jabber(1998年),是一个开源组织定义的网络即时通信协议。XMPP是一个分散型通信网络,XMPP的核心XML流传输协议;XMPP协议曾经是Google力推的即时通信协议,其代表作品是GTalk。XMPP可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议。

二、工作原理

节点连接到服务器 服务器利用本地目录系统中的证书对其认证 节点指定目标地址,让服务器告知目标状态 服务器查找、连接并进行相互认证 节点之间进行交互。

三、四个概念

XMPP服务器(不需要我们自己写)

XMPP客户端(iOS android win)

XMPP协议

XMPPFramework(三方框架)

经典服务器端Openfire

OpenFire是由JiveSoftware推出的一款经典XMPP Server,用Java编写,并且开源。OpenFire由XMPPServer+JavaWebServer(嵌入式jetty容器)组成,前者基于XMPP协议进行通信,后者是一个Web管理后台(HTTP/HTTPS). Openfire基于MINA框架,MINA框架是Java体系中目前应用非常广泛的一个通信框架。 MINA基于NIO,前身是Netty2,Netty2的架构不是很好,由Trustin Lee在2004年重写并改名为MINA。 NIO自JAVA 1.4之后加入JDK中,其核心内容便是非阻塞的,高性能的底层IO。换言之JDK 4之前的IO阻塞问题需要开发者自行解决。

Openfire的数据库选择

OpenFire是server端,因此数据库一般来说用C/S型DBMS比较好(SQLServer,MySQL,Oracle等),为了良好的并发性能,基本上不考虑SQLite这种嵌入式数据库(OpenFire的实现中也没有这个选项)。

外接数据库:如果OpenFire使用的数据库是独立的数据库服务器,那么这个配置过程叫做数据库外接,数据库外接可以让Openfire的数据库表写入一个已经存在的数据库中,方便我们做数据同步。

内置数据库:偶尔也会使用Openfire内置的数据库(PostgreSQL),Openfire称之为嵌入式数据库,但是不代表PostgreSQL是一款像SQLite的嵌入式数据库,PostgreSQL仍然是一款C/S架构的DBMS,只不过Openfire将其源码附加在自己的安装包中可以直接使用而已。

Openfire的安装

如果需要卸载MySQL,先停止MySQL服务在执行清理脚本,否则会出现问题

先准备好数据库,如果是外接数据库,需要先在对应的数据库中准备好相应的Schema,例如:

CREATE SCHEMA HMOpenFire;

CREATE DATABASE HMOpenFire;

在MySQL中以上两句SQL效果一样。

如果使用的是MySQL数据库,提前配置好schema的字符集为UTF8,因为MySQL的默认字符集是拉丁文,如果稍微不注意可能以后不方便保存中文。

安装好Openfire

安装好之后,访问localhost:9090 配置本地域,管理员账户,端口等一些简单配置。这些配置都可以通过XML配置文件修改。

配置正确的数据库连接URL java中的数据库连接为jdbc,java中直接连接数据库与jdbc-odbc桥有所不同,jdbc不需要配置数据源,只需要加载对应数据库的jdbc驱动即可。这些驱动已经附加在openfire安装包中,我们只需要选择即可。 而URL需要自己配置,例如mysql的数据库连接url为: jdbc:mysql://host:port/dbname?key1=value1&key2=value2…. 常见参数:(openfire有单独处理用户名和密码,不必写入url)

user 用户名

password 密码

autoReconnect 联机失败,是否重新联机(true/false)

maxReconnect 尝试重新联机次数

initialTimeout 尝试重新联机间隔

maxRows 传回最大行数

useUnicode 是否使用Unicode字体编码(true/false)

characterEncoding 何种编码(GB2312/UTF-8/…)

relaxAutocommit 是否自动提交(true/false)

capitalizeTypeNames 数据定义的名称以大写表示

结束openfire的配置,进入对应的数据库schema,检查openfire的系统表是否建表成功,以及初始数据是否插入成功,如果没问题就可以开始使用。

无效的JabberID — JID 什么才是合法的JabberID: wwh@im.itheima.com->bare wwh@im.itheima.com.[设备名或资源名(可改动)] - full

使用 信息App 或者 Spark 等尝试登陆我们的OpenFire服务器进行聊天

由于MacOS自带的信息App支持Jabber协议,比较方便我们测试服务器的功能是否正常。当然JiveSoftware提供的Spark也能登陆我们的服务器,只不过这个软件需要相应的JAVA环境才可以运行(JDK)。

登陆时,如果本地域可以被正确解析为server的IP地址,那么无需单独配置IP。反之需要填写IP地址。默认的端口为5222。

登陆完成后,进入9090后台,查看会话列表,观察我们的上下线状态。

四、导入XMPPFramework-iOS框架进行我们自己的客户端编写

1. 在Build Setting 搜索Header Search Paths 添加头文件搜索路径:/usr/include/libxml2

2. 在Build Phasses  添加2个动态链接库:libxml2.dylib  libresolve.dylib

3. 在Build Setting 搜索prefix 在Prefix Header中添加$SRCROOT/$(PRODUCT_NAME)/PrefixHeader.pch 添加pch文件,导入UIKit

4. build成功

五、框架初步认识

(一)Core核心库

XMPPStrem负责处理Socket流的连接断开读写等

XMPPElement:DDXMLElement子类,from、to、id;

XMPPJIDJabberID 对象,由 用户名@本地域/资源类型 组成bare只包含用户名和本地域的NSString,缺少资源类型full 完整的JID的NSString,包含资源类型

XMPPMessage< message type = “unkown”\>基础消息XML对象。消息正文位于\\中type属性一般有:normal,chat,groupChat

XMPPPresence\出席XML对象

子节点: show(有固定的类型) status

type属性一般有:available(上线 默认值),unavailable,subscribe,subscribed,unsubscribe,unsubscribed,probe等

XMPPIQ

信息/查询 XML对象

子节点: error

type属性一般有: result,error,set,get等 XMPPMessage,XMPPIQ,XMPPMessage都是XMPPElement的子类

XMPPModule

可以理解为功能模块的抽象类,基本上不可能直接实例化这个类

一些公有方法: active deactive等

扩展库

XMPPReconnect,XMPPAutoPing ,XMPPRoster,XMPPMessageArchiving,XMPPRoom,XMPPFileTransfer,XMPPVCardTemp,XMPPAvatar等附加功能模块,基本上都是继承XMPPModule

XMPPCoreDataStorage —CoreData存储器抽象类,基本上上述模块对应都有各自的实现

XMPPXXXXCoreDataStorageObject — 各个模块中的托管对象

GCDAsyncSocket、GCDMulticastDelegate,DDLog,XCodeColors 等三方框架

Xcode插件失效解决办法

1.打开xcode插件所在的目录: /{当前用户名}/ Library/Application\ Support/Developer/Shared/Xcode/Plug-ins

2.选择已经安装的插件例如VVDocument,右键点击show package contents,

3.找到info.plist 文件,找到DVTPlugInCompatibilityUUIDs的项目,

4.添加C4A681B0-4A26-480E-93EC-1218098B9AA0(当前xcode的一个号码),这个号码怎么得到? 在终端执行 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

5.再右键“打开包内容”双击contents\MacOS目录下的一个黑色图标,会打开终端窗口,最后打印“进程已完成”之类,

6.重启xcode

开启XCodeColors

配置DDLog颜色,开启enable属性

schema中添加环境变量 XcodeColors = YES

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

推荐阅读更多精彩内容

  • 一、即时通讯技术 即时通讯技术(IM -- Instant Messaging)-> 支持用户在线实时交谈 有许多...
    iOS_成才录阅读 8,376评论 10 76
  • 说明:本文主要阐述如何使用XAMPP、Openfire工具基于XMPP搭建本地服务器、实现即时通信。 即时通信 什...
    DH_Fantasy阅读 3,327评论 3 21
  • 即时通讯系列阅读 即时通讯基础 即时通讯:XMPP基础 即时通讯:XMPP项目实践-微聊 Smack类库最好的学习...
    JackChen1024阅读 3,597评论 0 11
  • 关于XMPP最权威的讲解:http://www.jabbercn.org/RFC3920(这个才是最权威的,下面文...
    随风飘荡的小逗逼阅读 1,425评论 1 5
  • 今天最大的收获就是学会了思维导图的制作。一直以为思维导图是用办公软件画出来的,从来没有想过这也需要专业的制图软件。...
    最爱加菲猫阅读 329评论 0 0