首页 > 其他 > 详细

XMPP 基础

时间:2014-03-08 12:16:28      阅读:618      评论:0      收藏:0      [点我收藏+]

XMPP 基础


技术博客http://www.cnblogs.com/ChenYilong/ 
新浪微博http://weibo.com/luohanchenyilong 

bubuko.com,布布扣
XMPP 基础 

即时通讯技术简介 
? 即时通讯技术(IM)支持用户在线实时交谈。如果要发送一条信息,用户需 要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看 到交谈的内容 
? 有许多的IM系统,如AOL IM、Yahoo IM、 MSN以及QQ,它们最大的区别在于 各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 
? 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当 可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已经 出现过的IM协议包括:IETF的对话初始协议(SIP)和即时通讯对话初始协议 和表示扩展协议(SIMPLE)、应用交换协议(APEX)、显示和即时通讯协议 (PRIM)及基于XML且开放的可扩展通讯和表示协议(XMPP)协议(常称 为Jabber 协议) 
? 人们多次努力,试图统一各大主要IM供应商的标准(AOL、Yahoo 及 Microsoft),但无一成功,且每一种IM仍然继续使用自己所拥有的协议 

bubuko.com,布布扣

bubuko.com,布布扣



即时通讯在垂直社交应用中的意义 

? 和第一代大而全的水平网站(又称综合性网站)不同,垂直网站注意 力集中在某些特定的领域或某种特定的需求,提供有关这个领域或需 求的全部深度信息和相关服务,作为互联网的新亮点,垂直网站正引 起越来越多人的关注。在越来越多的网络吸引老百姓的注意力时,网 民却逐渐走出时髦、好奇的初级阶段,不断在网上寻找着实际、实用 和实惠
? 随着移动互联网应用的发展,现在越来越多的App正在向垂直应用迁 移,垂直应用中同类用户群体之间的沟通,产生聚合就显得尤为重要 了,因此目前国内市场的XMPP应用开发的人才需求非常大 

bubuko.com,布布扣


XMPP起源 
? XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探测。最初, XMPP作为一个框架开发,目标是支持企业环境内的即时消息传递和联机状态 应用程序。当时的即时消息传递网络是私有的,不适合企业使用 
? XMPP前身是Jabber(1998年),是一个开源组织定义的网络即时通信协议 
? XMPP是一个分散型通信网络,这意味着,只要网络基础设施允许,任何 XMPP用户都可以向其他任何XMPP用户传递消息。多个XMPP服务器也可以 通过一个专门的“服务器-服务器"协议相互通信,提供了创建分散型社交网 络和协作框架的可能性 
? 尽管XMPP的出现是为了满足“个人-个人"即时消息传递的要求,但它完全 不必局限于此任务 


bubuko.com,布布扣


XMPP概述 

? XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。这表明 XMPP是可扩展的。可以通过发送扩展的信息来处理用户的需求,以及在 XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且, XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开 发者更容易建立客户应用程序或给一个配置好的系统添加功能 
? XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协 议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能 够非常漂亮 
? XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定 义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完 整,完善等先进性 
? XMPP的扩展协议Jingle使得其支持语音和视频,目前iOS尚不支持 
? XMPP的官方文档是RFC 3920 
? XMPP协议曾经是Google力推的即时通信协议,其代表作品是GTalk 

bubuko.com,布布扣


Google Talk(GTalk) 

? Google Talk是Google的IM工具,除了具有IM功能外,另外还加上了 
Voip功能,“界面清新大方",可直接链接Gmail,接受查看邮件 
? 由于Google Talk是基于Jabber开源标准,这种标准允许用户和其它的 即时讯息系统相连,比如苹果电脑的iChat,GAIM,Trillian Pro以及Psi。 Google Talk只能够在Windows平台上运行 
? Google Talk的用户无法使用这种软件与AIM,MSN Messenger或者雅 虎Messenger的用户进行互通 

bubuko.com,布布扣


GTalk界面截图 

bubuko.com,布布扣
bubuko.com,布布扣




GTalk即将退出历史舞台 

? 2013年5月,在Google I/O大会上,Google推出统一跨平台聊天应用 
Hangouts(环聊)取代Google Talk 
? Google Hangouts不支持XMPP协议。Google Hangouts用户与非Google 
服务如XMPP协议的强有力支持者jabber.org之间的交流无法进行 
? 目前,Google Wave是基于XMPP协议的,并且Google还开发Jingle扩 展进行基于XMPP协议的视频聊天。尽管Google尚未宣布Talk的关闭日 期,不过从Google关闭Reader和iCal支持来看,Talk关闭之日不会太远 

bubuko.com,布布扣


Google Hangouts宣传截图

Hangouts目前在中国大陆无法使用,尚不支持iOS7.0
bubuko.com,布布扣bubuko.com,布布扣

XMPP定义 
? XMPP:The Extensible Messaging and Presence Protocol(可扩展通讯
和表示协议)
? XMPP可用于服务类实时通讯、表示和需求响应服务中的XML数据元 流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用 的开放式协议
? XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探测。 促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向 因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同

bubuko.com,布布扣


XMPP的基本结构

? XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样, 使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个 客户端进行通讯时, 他们的消息都是通过服务器传递的。采用这种架 构,主要是为了简化客户端,将大多数工作放在服务器端进行 
? XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三 者的任意两个之间双向发生 
? 服务器同时承担了客户端信息记录,连接管理和信息的路由功能 
? 网关承担着与异构即时通信系统的互联互通,异构系统可以包括 
SMS(短信),MSN,ICQ等 
? 基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上 传输XML流 

bubuko.com,布布扣


XMPP工作原理 

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

传输内容 

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

bubuko.com,布布扣


XMPP的优缺点 
? 优点- 开放
- 标准(XMPP的技术规格已被定义在RFC 3920及RFC 3921) - 证实可用- 分散- 安全
- 可扩展
? 缺点- 数据负载过重- 没有二进制传输

bubuko.com,布布扣


XMPP的传输小结 
? XMPP是一种类似于HTTP协议的一种数据传输协议,其过程就 如同“解包装--〉包装"的过程。只需要理解其接收的类型及返 回的类型,便可以很好的利用XMPP来进行数据通讯
? XMPP官方网站--http://xmpp.org 

bubuko.com,布布扣
bubuko.com,布布扣 bubuko.com,布布扣
bubuko.com,布布扣



服务器搭建--安装MySQL 
bubuko.com,布布扣

bubuko.com,布布扣

启动MySQL服务器 
bubuko.com,布布扣

bubuko.com,布布扣

设置MySQL命令行搜索路径 

? 打开终端,输入: 
? vi ~/.bash_profile 
? 输入i 
? 然后粘贴以下内容



#mysql
alias mysql=‘/usr/local/mysql/bin/mysql‘
alias mysqladmin=‘/usr/local/mysql/bin/mysqladmin‘
#ls
alias ls=‘ls -G
’

                                                                            
? 按ESC键 
? 输入:wq 
? 重新启动终端程序 

bubuko.com,布布扣


修改MySQL的管理员密码 
? mysqladmin -u root password “123456"

bubuko.com,布布扣

安装MySQL管理工具--Navicat Premium 
bubuko.com,布布扣

bubuko.com,布布扣

建立数据库连接(1) 
bubuko.com,布布扣

bubuko.com,布布扣
建立数据库连接(2)

bubuko.com,布布扣

bubuko.com,布布扣

新建数据库--Openfire

bubuko.com,布布扣

bubuko.com,布布扣

彻底删除MySQL的方法 
.1. 先停止所有mysql有关进程 
.2. sudo rm /usr/local/mysql 
.3. sudo rm -rf /usr/local/mysql* 
.4. sudo rm -rf /Library/StartupItems/MySQLCOM 
.5. sudo rm -rf /Library/PreferencePanes/My* 
.6. sudo vi /etc/hostconfig # removed the line MYSQLCOM=-YES- 
.7. rm -rf ~/Library/PreferencePanes/My* 
.8. sudo rm -rf /Library/Receipts/mysql* 
.9. sudo rm -rf /Library/Receipts/MySQL* 
.10. sudo rm -rf /var/db/receipts/com.mysql.* 

bubuko.com,布布扣


显示隐藏文件 
? 在终端中输入以下命令,可以切换隐藏文件的显示 
? 显示隐藏文件 
? defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder 
? 不显示隐藏文件 
? defaults write com.apple.finder AppleShowAllFiles No && killall Finder 
? 提示:

?? 在OS X 10.9 Mavericks需要将Finder修改成finder才行,第一个字母换 
成小写的f
?? 以上命令类似与在iOS开发中的 
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"com.apple.finder"]; 

bubuko.com,布布扣


服务器搭建--Openfire 
? 可用服务器地址:http://xmpp.org/xmpp-software/servers/
? 课程选用:Openfire

? Openfire简介
- 采用Java开发,开源的实时协作(RTC)服务器,基于 XMPP(Jabber)协议 
- 安装Openfire之前,需要确认是否安装了JDK 
- 如果没有,需要安装jdk-7u45-macosx-x64 
- 可以轻易的构建高效率的即时通信服务器 
- 安装和使用简单,并利用Web进行管理 
- 单台服务器可支持上万(1000)并发用户 

bubuko.com,布布扣
bubuko.com,布布扣

Openfire安装

? 下载并安装:
http://www.igniterealtime.org/projects/openfire/index.jsp
? 安装位置:/usr/local/openfire/
? 安装位置该文件夹的用户访问权限
? 数据库脚本保存在/usr/local/openfire/resources/database文件夹下

bubuko.com,布布扣
bubuko.com,布布扣

修改/usr/local/openfire/目录权限
bubuko.com,布布扣

bubuko.com,布布扣 bubuko.com,布布扣

设置openfire数据库 
1. 将/usr/local/openfire/resources/database/openfire_mysql.sql复
制到桌面2. 在Navicat中新建Query,导入该文件并执行

bubuko.com,布布扣


Openfire设置 
1. 在系统偏好中确保Openfire服务已经启动
2. 使用浏览器访问:http://localhost:9090
3. 如果需要重新配置,可以修改/usr/local/openfire/conf/openfire.xml,将末尾的true修改为 false

4.重新设置安装openfire,不会影响其中的用户,只是在忘记密码时,进行的操作.

bubuko.com,布布扣
bubuko.com,布布扣

设置语言 
bubuko.com,布布扣

bubuko.com,布布扣

设置服务器(注意域名) 
bubuko.com,布布扣

bubuko.com,布布扣
选择数据库连接方式

bubuko.com,布布扣

bubuko.com,布布扣
设置数据库

bubuko.com,布布扣

bubuko.com,布布扣

设置管理员密码--不要跳过! 
bubuko.com,布布扣

bubuko.com,布布扣

配置完成并登录 
bubuko.com,布布扣

bubuko.com,布布扣

Openfire服务器端口 

bubuko.com,布布扣

bubuko.com,布布扣

新建用户 

bubuko.com,布布扣
bubuko.com,布布扣

客户端设置测试Openfire服务器 


bubuko.com,布布扣

bubuko.com,布布扣 bubuko.com,布布扣

XMPP--JID 

? 每个 XMPP客户端用户必须拥有一个全局惟一标识符。基于历史原因, 这些标识符称为 Jabber ID或JID。鉴于协议的分布式特征,JID应包含 联系用户所需的所有信息,JID的结构类似于电子邮件地址,但不要求 JID同时也是有效的电子邮件收件人 
? 客户端和服务器节点,被统称为 XMPP实体,都拥有JID。例如: SomeCorp公司的员工 John Doe可能拥有JID: John.Doe@somecorp.com,其中somecorp.com是 SomeCorp公司的 XMPP服务器的地址,John.Doe是John Doe的用户名 
? 还可以使用JID连接到其他资源。这允许在一个XMPP实体标识符之外 进一步处理拓展 

bubuko.com,布布扣


支持XMPP协议的客户端 

Spark Adium 
bubuko.com,布布扣

 
bubuko.com,布布扣
bubuko.com,布布扣 

? 体会XMPP目前所能支持的功能?并且构思即将开发的XMPP项目所能包含的功能 
bubuko.com,布布扣

iOS的XMPP框架--XMPPFramework

? 其他语言可用框架地址:
http://xmpp.org/xmpp-software/libraries/
? 课程选用:XMPPFramework,唯一可用的OC框架 

bubuko.com,布布扣
bubuko.com,布布扣

导入XMPPFramework框架(1)

?? 下载XMPPFramework框架:
https://github.com/robbiehanson/XMPPFramework
?? gitclone
git clonehttps://github.com/robbiehanson/XMPPFramework.git
?? 导入依赖框架

bubuko.com,布布扣
bubuko.com,布布扣 bubuko.com,布布扣

CocoaLumberjack:日志框架 CocoaAsyncSocket:底层网络框架,实现异步Socket网络通讯
需要添加CFNetwork&Security框架依赖 KissXML:XML解析框架
需要添加libxml2.dylib框架依赖
需要指定如下编译选项:
OTHER_LDFLAGS = -lxml2 HEADER_SEARCH_PATHS =/usr/include/libxml2
libidn
-

设置XML头文件搜索路径 

bubuko.com,布布扣

bubuko.com,布布扣

设置其他链接标记 

bubuko.com,布布扣
bubuko.com,布布扣

导入XMPPFramework框架(2) 

? 将以下4个文件夹导入到项目 - Authentication
- Categories - Core
- Utilities
? 另外还需要添加libresolv.dylib依赖 

bubuko.com,布布扣


导入XMPPFramework框架(3)

? 导入XMPP扩展框架
- Extensions
? 将Sample_XMPPFramework.h添加到项目,并且重命名为
XMPPFramework.h
? 在终端输入:git commit -m “添加XMPP框架" 
? 可以一次性提交所有增加的文件 

bubuko.com,布布扣


XMPP框架常用扩展

? XEP-0045: 多用户聊天 
? XEP-0060: 发布-订阅 
? XEP-0065: SOCKS5字节流 
? XEP-0085: 聊天状态通知 
? XEP-0096: 文件传输 
? XEP-0172: 用户昵称 
? XEP-0184: 消息送达 
? CoreDataStorage: 数据存储 
? Reconnect:重新连接 
? Roster:花名册 
? http://xmpp.org/xmpp-protocols/xmpp-extensions/ 

bubuko.com,布布扣
bubuko.com,布布扣 bubuko.com,布布扣 bubuko.com,布布扣 bubuko.com,布布扣 bubuko.com,布布扣 bubuko.com,布布扣 bubuko.com,布布扣

新建项目并导入XMPP框架练习

? 熟练掌握XMPP框架的导入过程
? 并且构思即将开发的XMPP项目所能包含的功能 

bubuko.com,布布扣


CocoaLumberjack

? 是一款高性能的日志输出插件
? 需要配合XcodeColors插件一起使用?https://github.com/robbiehanson/XcodeColors

bubuko.com,布布扣
bubuko.com,布布扣

Common.h

#import "DDLog.h"!
#import
 "DDTTYLogger.h"!
!
#ifdef DEBUG!
static const int ddLogLevel =LOG_LEVEL_VERBOSE;! #else!
static const int ddLogLevel = LOG_LEVEL_OFF;! #endif 

bubuko.com,布布扣


应用程序启动后设置跟踪级别

[DDLog addLogger:[DDTTYLogger sharedInstance]];! [[DDTTYLogger sharedInstance] setColorsEnabled:YES];!
[[DDTTYLogger sharedInstance] setForegroundColor:[UIColor blueColor] backgroundColor:nilforFlag:LOG_FLAG_INFO];!
!
DDLogInfo(@"提示信息");! DDLogWarn(@"警告信息");! DDLogVerbose(@"详细信息");!DDLogError(@"错误信息"); 

bubuko.com,布布扣


XMPP核心文件

? XMPPStream:是开发过程中最主要交互的类,所有扩展和自定义代 
码均要基于此类进行 
? XMPPParser:供XMPPStream解析使用 
? XMPPJID:提供了一个不可变JID的实现,遵守NSCopying协议和 NSCoding协议 
? XMPPElement:以下三个XMPP元素的基类 
? XMPPIQ :请求 
? XMPPMessage :消息 
? XMPPPresence :出席 
? XMPPModule:开发XMPP扩展时使用 
? XMPPLogging:XMPP的日志框架 
? XMPPInternal:整个XMPP框架内部使用的核心和高级底层内容 

bubuko.com,布布扣


XMPPStream实例的配置

1. 配置如何连接至XMPP服务器 2. 添加代理3. 添加模块4. 开始连接
5. 开始授权 ? 注意:
- XMPP框架仅提供了一个最小的代理委托系统用于接收三种XMPP 类型(IQ、Message和Presence),如果要实现更多的功能,开发 者还需要编写大量的相关代码
- 为了简化开发,通常将XMPPStream放置在AppDelegate中,以便 于全局访问 

bubuko.com,布布扣


XMPP框架提供的主要扩展功能

? XMPPReconnect:如果意外中断,自动重连XMPP流 ? XMPPRoster:标准的XMPP花名册? XMPPRoom:提供多人聊天支持?XMPPPubSub:提供公共订阅支持
? ...... 
bubuko.com,布布扣

通信类别及公共XML属性

? 使用XMPP的实时消息传递系统包含三大通信类别: - 消息传递,其中数据在有关各方之间传输 - 联机状态,允许用户广播其在线状态和可用性 - 信息/查询请求,它允许XMPP实体发起请求并从另一个实体接收响应
? 以上三种类型的XMPP节都拥有以下公共属性: -from:源XMPP实体的JID - to:目标接收者的JID - id:当前对话的可选标识符 
- type:节的可选子类型 - xml:lang:如果内容是人们可读的,则为消息语言的描述 

bubuko.com,布布扣


XMPP应用程序功能预设

? 用户登录、注册 ? 添加好友Roster ? 好友聊天? 表情文字(CoreText) ? 聊天状态XEP-0085
? 聊天室群聊XEP-0045 ? 发送文件XEP-0096 ? 语音聊天XEP-0065

bubuko.com,布布扣

? chenyilong. Powered by Postach.io

XMPP 基础,布布扣,bubuko.com

XMPP 基础

原文:http://www.cnblogs.com/ChenYilong/p/3587344.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!