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

• 随着移动互联网应用的发展,现在越来越多的App正在向垂直应用迁 移,垂直应用中同类用户群体之间的沟通,产生聚合就显得尤为重要 了,因此目前国内市场的XMPP应用开发的人才需求非常大
• XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探测。最初, XMPP作为一个框架开发,目标是支持企业环境内的即时消息传递和联机状态 应用程序。当时的即时消息传递网络是私有的,不适合企业使用
• XMPP前身是Jabber(1998年),是一个开源组织定义的网络即时通信协议
• XMPP是一个分散型通信网络,这意味着,只要网络基础设施允许,任何 XMPP用户都可以向其他任何XMPP用户传递消息。多个XMPP服务器也可以 通过一个专门的“服务器-服务器"协议相互通信,提供了创建分散型社交网 络和协作框架的可能性
• 尽管XMPP的出现是为了满足“个人-个人"即时消息传递的要求,但它完全 不必局限于此任务
• XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协 议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能 够非常漂亮
• XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定 义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完 整,完善等先进性
• XMPP的扩展协议Jingle使得其支持语音和视频,目前iOS尚不支持
• XMPP的官方文档是RFC 3920
• XMPP协议曾经是Google力推的即时通信协议,其代表作品是GTalk
Voip功能,“界面清新大方",可直接链接Gmail,接受查看邮件
• 由于Google Talk是基于Jabber开源标准,这种标准允许用户和其它的 即时讯息系统相连,比如苹果电脑的iChat,GAIM,Trillian Pro以及Psi。 Google Talk只能够在Windows平台上运行
• Google Talk的用户无法使用这种软件与AIM,MSN Messenger或者雅 虎Messenger的用户进行互通

Hangouts(环聊)取代Google Talk
• Google Hangouts不支持XMPP协议。Google Hangouts用户与非Google
服务如XMPP协议的强有力支持者jabber.org之间的交流无法进行
• 目前,Google Wave是基于XMPP协议的,并且Google还开发Jingle扩 展进行基于XMPP协议的视频聊天。尽管Google尚未宣布Talk的关闭日 期,不过从Google关闭Reader和iCal支持来看,Talk关闭之日不会太远


• XMPP:The Extensible Messaging and Presence Protocol(可扩展通讯
和表示协议)
• XMPP可用于服务类实时通讯、表示和需求响应服务中的XML数据元 流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用 的开放式协议
• XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探测。 促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向 因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同
• XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三 者的任意两个之间双向发生
• 服务器同时承担了客户端信息记录,连接管理和信息的路由功能
• 网关承担着与异构即时通信系统的互联互通,异构系统可以包括
SMS(短信),MSN,ICQ等
• 基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上 传输XML流



• 而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变 成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了, 方便了开发和查错
• 而XMPP的核心部分就是一个在网络上分片段发送XML的流协议。这 个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的 可以被进一步利用的网络基础协议,可以说XMPP用TCP传的是XML流
• 优点- 开放
- 标准(XMPP的技术规格已被定义在RFC 3920及RFC 3921) - 证实可用- 分散- 安全
- 可扩展
• 缺点- 数据负载过重- 没有二进制传输
• XMPP是一种类似于HTTP协议的一种数据传输协议,其过程就 如同“解包装--〉包装"的过程。只需要理解其接收的类型及返 回的类型,便可以很好的利用XMPP来进行数据通讯
• XMPP官方网站--http://xmpp.org







• 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
• 重新启动终端程序
• mysqladmin -u root password “123456"





建立数据库连接(2)




.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.*
• 在终端中输入以下命令,可以切换隐藏文件的显示
• 显示隐藏文件
• defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder
• 不显示隐藏文件
• defaults write com.apple.finder AppleShowAllFiles No && killall Finder
• 提示:
成小写的f
Ø 以上命令类似与在iOS开发中的
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"com.apple.finder"];
- 采用Java开发,开源的实时协作(RTC)服务器,基于 XMPP(Jabber)协议
- 安装Openfire之前,需要确认是否安装了JDK
- 如果没有,需要安装jdk-7u45-macosx-x64
- 可以轻易的构建高效率的即时通信服务器
- 安装和使用简单,并利用Web进行管理
- 单台服务器可支持上万(1000)并发用户

http://www.igniterealtime.org/projects/openfire/index.jsp
• 安装位置:/usr/local/openfire/
• 安装位置该文件夹的用户访问权限




1. 将/usr/local/openfire/resources/database/openfire_mysql.sql复
制到桌面2. 在Navicat中新建Query,导入该文件并执行
1. 在系统偏好中确保Openfire服务已经启动
2. 使用浏览器访问:http://localhost:9090
3. 如果需要重新配置,可以修改/usr/local/openfire/conf/openfire.xml,将末尾的true修改为 false





选择数据库连接方式


设置数据库










• 客户端和服务器节点,被统称为 XMPP实体,都拥有JID。例如: SomeCorp公司的员工 John Doe可能拥有JID: John.Doe@somecorp.com,其中somecorp.com是 SomeCorp公司的 XMPP服务器的地址,John.Doe是John Doe的用户名
• 还可以使用JID连接到其他资源。这允许在一个XMPP实体标识符之外 进一步处理拓展





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


需要添加CFNetwork&Security框架依赖 KissXML:XML解析框架
需要添加libxml2.dylib框架依赖
需要指定如下编译选项:
OTHER_LDFLAGS = -lxml2 HEADER_SEARCH_PATHS =/usr/include/libxml2
libidn
-


- Categories - Core
- Utilities
• 另外还需要添加libresolv.dylib依赖
- Extensions
• 将Sample_XMPPFramework.h添加到项目,并且重命名为
XMPPFramework.h
• 在终端输入:git commit -m “添加XMPP框架"
• 可以一次性提交所有增加的文件
• XEP-0060: 发布-订阅
• XEP-0065: SOCKS5字节流
• XEP-0085: 聊天状态通知
• XEP-0096: 文件传输
• XEP-0172: 用户昵称
• XEP-0184: 消息送达
• CoreDataStorage: 数据存储
• Reconnect:重新连接
• Roster:花名册
• http://xmpp.org/xmpp-protocols/xmpp-extensions/








#import "DDTTYLogger.h"!
!
#ifdef DEBUG!
static const int ddLogLevel =LOG_LEVEL_VERBOSE;! #else!
static const int ddLogLevel = LOG_LEVEL_OFF;! #endif
[[DDTTYLogger sharedInstance] setForegroundColor:[UIColor blueColor] backgroundColor:nilforFlag:LOG_FLAG_INFO];!
!
DDLogInfo(@"提示信息");! DDLogWarn(@"警告信息");! DDLogVerbose(@"详细信息");!DDLogError(@"错误信息");
码均要基于此类进行
• XMPPParser:供XMPPStream解析使用
• XMPPJID:提供了一个不可变JID的实现,遵守NSCopying协议和 NSCoding协议
• XMPPElement:以下三个XMPP元素的基类
• XMPPIQ :请求
• XMPPMessage :消息
• XMPPPresence :出席
• XMPPModule:开发XMPP扩展时使用
• XMPPLogging:XMPP的日志框架
• XMPPInternal:整个XMPP框架内部使用的核心和高级底层内容
5. 开始授权 • 注意:
- XMPP框架仅提供了一个最小的代理委托系统用于接收三种XMPP 类型(IQ、Message和Presence),如果要实现更多的功能,开发 者还需要编写大量的相关代码
- 为了简化开发,通常将XMPPStream放置在AppDelegate中,以便 于全局访问
• ......

• 以上三种类型的XMPP节都拥有以下公共属性: -from:源XMPP实体的JID - to:目标接收者的JID - id:当前对话的可选标识符
- type:节的可选子类型 - xml:lang:如果内容是人们可读的,则为消息语言的描述
• 聊天室群聊XEP-0045 • 发送文件XEP-0096 • 语音聊天XEP-0065
XMPP 基础的更多相关文章
- XMPP 基础 (转载)
技术博客 http://www.cnblogs.com/ChenYilong/ 新浪微博 http://weibo.com/luohanchenyilong Fullscreen XMPP 基础 ...
- (转)OpenFire源码学习之一:XMPP基础知识
转:http://blog.csdn.net/huwenfeng_2011/article/details/43412919 前面两张主要讲基础部分.XMPP与Mina有部分抄写于互联网的其他大事 X ...
- 基于XMPP的即时通信系统的建立(一)— XMPP基础概念
相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用.为了解决即时通信的标准问题,IETF(互联网工程任务组 The ...
- XMPP基础
概要 1.即时通讯技术简介2.XMPP诞生的由来3.XMPP特点4.XMPP的基本结构5.XMPP工作原理6.XMPP的优缺点7.OSI七层模型8.IP地址.端口号.传输协议9.TCP和UDP的区别1 ...
- 即时聊天IM之一 XMPP协议简述
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 综述: ...
- iOS,XMPP本地环境搭建和框架使用
1.XMPP的MySQL和openfire环境配置 2.XmppFramework框架导入和介绍 XMPP的MySQL和openfire环境配置 1.下载mysql安装 mysql下载 打开MySQL ...
- XMPP即时通讯
XMPP:XMPP是基于XML的点对点通讯协议,The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议). XMPP可用于服务类实时通讯,表 ...
- iOS - XMPP 的使用
1.XMPP XMPP 是一个基于 Socket 通信的即时通讯的协议,它规范了即时通信在网络上数据的传输格式,比如登录,获取好友列表等等的格式.XMPP 在网络传输的数据是 XML 格式. 开发架构 ...
- Xmpp获取离线消息
文章只是选取了其中一段,无XMPP基础的人可能看起来有点复杂; 假设我们注册了一个用户,用户名叫shimiso,那么我们如何让shimiso这个用户一登陆就取到离线消息呢? PPConnection. ...
随机推荐
- Netty源码分析(前言, 概述及目录)
Netty源码分析(完整版) 前言 前段时间公司准备改造redis的客户端, 原生的客户端是阻塞式链接, 并且链接池初始化的链接数并不高, 高并发场景会有获取不到连接的尴尬, 所以考虑了用netty长 ...
- 小刘的机器学习---SVM
前言: 这是一篇记录小刘学习机器学习过程的随笔. 正文: 支持向量机(SVM)是一组用于分类, 回归和异常值检测的监督学习方法. 在分类问题中,SVM就是要找到一个同时离各个类别尽可能远的决策边界即最 ...
- wordpress 5.1 后台拿shell
闲着没事搭建了一套最新版wordpress 5.1,本身wordpress后台安全防御是比较差的,想尝试下后台是否可以拿shell. 再上传插件的地方可以直接上传php文件,并且该文件可以执行: sh ...
- 实验吧ctf题库web题wp
经历了学校的校赛,一度自闭,被大佬们刺激的要奋发图强. 1.后台登录 链接: http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php 打开题目首先查看源码, ...
- Android webview背景设置为透明无效 拖动时背景闪烁黑色
Adndroid 2.X的设置 webview是一个使用方便.功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色). 此时就想到了要把webview的背 ...
- python获取时间————前一天后一天前一小时后一小时前一分钟后一分钟
获取当天日期 一: import time print(time.strftime("%Y-%m-%d")) #输出当前日期 2018-05-01 二: import dateti ...
- python中eval方法的使用
eval函数就是实现list.dict.tuple与str之间的转化str函数把list,dict,tuple转为为字符串# 字符串转换成列表a = "[[1,2], [3,4], [5,6 ...
- Linux内核分析(第五周)
系统调用的三层皮(下) 一.给MenuOs增加time和time-asm命令 ls rm menu -rf git clone xx(克隆新版本) cd menu make rootfs(自动编译生成 ...
- [CB]Intel 2018架构日详解:新CPU&新GPU齐公布 牙膏时代有望明年结束
Intel 2018架构日详解:新CPU&新GPU齐公布 牙膏时代有望明年结束 北京时间12月12日晚,Intel在圣克拉拉举办了架构日活动.在五个小时的演讲中,Intel揭开了2021年CP ...
- Python的文件读写
目录 读文件 操作文件 读取内容 面试题的例子 写文件 操作模式 指针操作 字符编码 读文件 操作文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): 文件使用完毕后必 ...