XMPP
XMPP
这篇仅仅只是整理了下传智播客的笔记,没什么卖点,只是为了保留点资料而记载而已,不用花时间在这篇文章上面哦。
简介
即时通讯技术(IM - Instant Messaging)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容。
有许多的IM系统,如AOL、Yahoo IM、MSN以及QQ,它们 '最大的区别在于各自通讯协议的实现',所以 "即时通讯技术的核心在于它的传输协议"。
协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已经出现过的IM协议包括:
IETF的对话初始协议(SIP)和即使通讯对话初始协议和表示扩展协议(SIMPLE)、应用交换协议(APEX)、显示和即使通讯协议(PRIM)及 '基于XML且开放的可扩展通讯和表示协议(XMPP)协议'(常被称为jabber协议)
人们多次努力,视图统一各大主要IM供应商的标准(AOL、Yahoo及Microsoft),但无一成功,且每一种IM仍然继续使用自己所拥有的协议。
XMPP的官方文档 RFC3920
XMPP的基本结构:
XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的。
采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行。
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。
基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML流。
配置服务器
搜索xmpp.org 安装Openfire
1> 安装数据库mysql
配置mysql的用户名的密码
默认mysql有一个root账号
1.打开终端,输入:sudo vi ~/.bash_profile
2.输入i (编辑)
然后粘贴以下内容
# mysql
alias mysql='/usr/local/mysql/bin/mysql'
alias mysqladmin='/usr/local/mysql/bin/mysqladmin'
# ls
alias ls='ls -G'
3.按ESC键 输入:wq
4.重新启动终端程序
mysql登录
mysql -u root -p (退出 exit或\q)
修改root的密码 mysqladmin -u root password "123456"
用mysqladmin
mysqladmin -u root password "newpass"
如果root已经设置过密码,采用如下方法
mysqladmin -u root password oldpass "newpass"
我用的 mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
查看数据库的命令
mysql> show databases;
2> 安装xmpp服务端(openfire)
openfire它是基于java实现
如果要安装openfire,电脑必须安装java jdk
判断当前的电脑有没有安装jdk
在终端使用java -version 提示没有安装jdk,那就手动安装
3> 配置数据库表
1.访问 /usr/local目录
2.将openfire/resources/databases的openfire_mysql.sql文件放置桌面
3.安装mysqlworkbench
4.建立连接
5.创建一个数据库为openfire服务
往openfire数据库导入桌面的openfire_mysql.sql脚本文件
4> 配置openfire的管理后台
openfire的管理控制台,用户名是admin 密码(前面输入的)
框架学习
环信 也是可以用于即时通讯
不要自己搭建服务器
学习xmpp ios框架
下载框架
浏览器输入 xmpp.org -> XMPP Software -> Libraries -> xmppframework
下载xmppframework框架(下载的时候,下载release版本的,bug较少)
xmppframework 框架结构
Authentication 授权登录相关
Categories 分类
Core 核心,根服务器交互的类主要在Core文件夹里面
Extensions 扩展模块,"默认在扩展模块里的功能都是不工作的","提供数据缓存的模块,但是没有开启"
Utilities 工具类
Vendor 供应商。对于xmpp框架来说,它需要使用第三方框架
- CocoaAsyncSocket socket框架
- CocoaLumberjack 第三方的日志输出框架,此日志框架可以在控制台看到颜色的输出
- KissXML 解析xml数据
Xcode 提供示例程序
XMPP 核心文件
XMPPStream:是开发过程中最主要交互的类,所有扩展和自定义代码均要基于此类进行
XMPPParser:供XMPPStream解析使用
XMPPJID:提供了一个不可变JID的实现,遵守NSCopying协议和NSCoding协议
XMPPElement:以下三个XMPP元素的基类
- XMPPIQ: 请求
- XMPPMessage: 消息
- XMPPPresence: 出席
XMPPModule:开发XMPP扩展时使用
XMPPLogging:XMPP的日志框架
XMPPInternal:整个XMPP框架内部使用的核心和高级底层内容
presence 的状态:
parameter | description |
---|---|
available | 上线 |
away | 离开 |
do not disturb | 忙碌 |
unavailable | 下线 |