iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备

XMPP简单介绍与准备

一、即时通讯简单介绍

1、简单说明

即时通讯技术(IM)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容。

有许多的IM系统,如AOL IM、Yahoo IM、 MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议。

协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已经出现过的IM 协议包括:IETF的对话初始协议(SIP)和即时通讯对话初始协议和表示扩展协议(SIMPLE)、应用交换协议(APEX)、显示和即时通讯协议 (PRIM)及基于XML且开放的可扩展通讯和表示协议(XMPP)协议(常称为 Jabber 协议)。

业界经过多次努力,试图统一各大主要IM供应商的标准(AOL、Yahoo 及 Microsoft),但无一成功,且每一种IM仍然继续使用自己所拥有的协议。

2.遵守XMPP即时通讯协议
设计一款全世界都使用的即时通讯协议,无论使用什么即时通讯软件,都可以互联互通。

3.即时通讯在垂直社交中的意义


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

4.XMPP的起源

XMPP
是基于XML的协议,用于即时消息(IM)以及在线现场探测。最初,XMPP作为一个框架开发,目标是支持企业环境内的即时消息传递和联机状态应用程序。
当时的即时消息传递网络是私有的,不适合企业使用。XMPP前身是Jabber(1998年),是一个开源组织定义的网络即时通信协议。

XMPP是一个分散型通信网络,这意味着,只要网络基础设施允许,任何XMPP用户都可以向其他任何XMPP用户传递消息。多个XMPP服务器也可以通过一个专门的“服务器-服务器”协议相互通信,提供了创建分散型社交网络和协作框架的可能性。

尽管XMPP的出现是为了满足“个人-个人”即时消息传递的要求,但它完全不必局限于此任务。

二、XMPP相关

1.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。

注意:相对xml,json更高效一些。

2.Google Talk说明

Google

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

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关闭之日不会太远

3.XMPP定义

XMPP:The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议)。

XMPP可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议。

XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探测。促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。

4.基本结构

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

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

服务器同时承担了客户端信息记录,连接管理和信息的路由功能。 网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。

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

三:原理介绍

简介

XMPP是一种基于标准通用标记语言的子集XML协议,具有超强的可拓展性。经过拓展
的XMPP可以通过发送拓展的信息来处理用户需求。XMPP包含了正对服务端的软件协议,使之能够与另一个进行通话。XMPP以Jabber协议为基础,
而Jabber是即时通讯中常用的开放式协议。目前由IETF国际标准组织完成标准化工作。

标准化的核心分为两个部分

  • 核心的XML流传输协议
  • 基于XMLFreeEIM流传输的即时通讯扩展应用(这部分支持语音和视频)

优点:

开放,它是开放源码的,自由开放公开。
标准化,IETF 互联网工程工作小组标准化
成熟,第一个jabber技术是在1998年开发的,现在已经相当稳定

四:开始使用XMPPFramework

本文演示一个运行了XMPPFramework框架的项目demo,这不是一个成熟的
应用,仅仅展示了框架的使用方法。本demo仅仅使用了框架的一部分功能。当你决定添加XMPP框架到你自己的IOS应用中,本文将提供详细的介绍。最好
按照流程一步一步来,不要跳过某些步骤。

Setp1:

下载最新的代码

Step2

框架有几个依赖的文件,当你把XMPPFramework拿下来的时候,已经自动放在Vendor文件夹下面。我们将把每一个依赖文件过一遍。

第一个依赖包是CocoaLumberjack,它的位置:Vendor/CocoaLumberjack。拖进工程选择copy,确保项目能够编译。

Step3
第二个依赖包是CocoaAsyncSocket,它的位置:Vendor/CocoaAsyncSocket,拖进工程选择copy。
这个包需要你添加苹果的CFNetwork framework和Security framework。Target -> Build
Phases -> Link Binary With Libraries -> + ->选择CFNetwork
framework和Security framework。添加完后,确保项目能够编译。
Step4
第三个依赖包是KissXml,在Vendor/KissXML 可以找到。KissXML使用libxml2,你需要添加苹果的libxml2库
到工程文件中。在Targets->BuildSettings->Search Paths-> + ->/usr/include/libxml2。

libxml2.需要你添加苹果的CFNetwork
framework和Security framework。Target -> Build Phases -> Link Binary
With Libraries -> + ->选择libxml2.dylb。

添加完后,确保项目能够编译

Step5
第四个,也是最后一个依赖包是LIBLdn,添加下面的三个文件到Xcode工程文件

  • Vendor/libidn/idn-int.h
  • Vendor/libidn/stringprep.h
  • Vendor/libidn/libidn.a

最后一个文件是静态库,支持x86*64, i386, ppc, armv6, armv7指令集,因此比较大1.3M。但你的应用打包时,它只会解压你的应用需要用到的指令集对应的文件,所以不用担心应用程序文件变大。添加完成后,确保项目能够编译。

Step6
添加以下的文件夹到工程中

  • Authentication
  • Categories
  • Core
  • Utilities

Target -> Build Phases -> Link Binary With Libraries -> + ->选择libresolv.dylib,添加完后,确保项目能够编译。

现在你已经可以开始使用XMPPFramwork 在你的项目中,
以下页面你可以了解它的使用
https://github.com/robbiehanson/XMPPFramework/wiki/IntroToFramework

最后我自己的整理版本是这样的:

添加以下的文件夹到工程中

  • Authentication
  • Categories
  • Core
  • Utilities

添加Vendor下面的CocoaLumberjack、CocoaAsyncSocket、KissXml、LIBLdn文件夹道工程中,选择copy。

添加苹果的libxml2库 到工程文件中。在Targets->BuildSettings->Search Paths-> + ->/usr/include/libxml2

添加苹果的动态链接库。Target
-> Build Phases -> Link Binary With Libraries -> +
->选择CFNetwork framework、libxml2.dylb、Security
framework、libresolv.dylib。

最后确保编译通过。

时间: 2024-10-15 16:34:36

iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备的相关文章

iOS开发——网络编程OC篇&(三)数据请求

一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:urlStr]; 4 5 // 2.创建请求对

iOS开发——网络编程OC篇&(九)数据解析

数据解析 关于iOS开发的中数据解析的方法有两种JSON和XML,这里只做简单的介绍,会使用就可以了. JSON—— 关于JSON的解析经过很多爱好者的分析使用相同自带的还是最好的,不管是从使用的容易度还是性能方面 NSJSONSerialization 1 -(void)start 2 { 3 4 NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"json"]; 5

iOS开发——网络编程OC篇&(二)XMPP实现用户登录与注销

登录: 步骤: * 在AppDelegate实现登录 1. 初始化XMPPStream 2. 连接到服务器[传一个JID] 3. 连接到服务成功后,再发送密码授权 4. 授权成功后,发送"在线" 消息 一:导入框架,根据上一篇文章的说明去导入相应的库与文件 二:定义一个XMPP的成员变量 1 @interface AppDelegate ()<XMPPStreamDelegate>{ 2 XMPPStream *_xmppStream; 3 } 三:按步骤在代理方法中声明四

iOS开发——网络编程OC篇&amp;Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要

iOS开发——网络编程OC篇&amp;总结

网络开发总结 一.一个HTTP请求的基本要素 1.请求URL:客户端通过哪个路径找到服务器 2.请求参数:客户端发送给服务器的数据 * 比如登录时需要发送的用户名和密码 3.返回结果:服务器返回给客户端的数据 * 一般是JSON数据或者XML数据 二.基本的HTTP请求的步骤(移动客户端)1.拼接"请求URL" + "?" + "请求参数" * 请求参数的格式:参数名=参数值 * 多个请求参数之间用&隔开:参数名1=参数值1&参数

iOS开发——网络编程OC篇&amp;(十)NSURLConnection/NSSeccession

一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSURLConnection的使用 1.简单说明 使用NSURL

iOS开发——网络编程OC篇&amp;使用WebView构建HyBird应用

使用WebView构建HyBird应用 HyBird是一种本地技术与Web相结合,能过实现跨平台的移动应用开发,最常用的一个框架:PhoneGap 一:首先,写好html代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, m

iOS开发——网络编程OC篇&amp;(十二)AFN详解

AFN详解 众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题. 一.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit (印度人写的). 3.AFN一直还在更新. AFNetworking的出现:MAC/iOS设计的一套网络

iOS开发——网络编程OC篇&amp;(五)网络监控

网络监控 随着移动网络升级:2G->3G->4G甚至相传正在研发的5G,网络速度是越来越快,但这流量也像流水一般哗哗的溜走. 网上不是流传一个段子: 睡觉忘记关流量,第二天房子就归移动了! 这固然是一种夸张的说法,但是作为一个优秀的App开发人员,我们需要在App中给出最恰当的提示. 在需要花费大量流量的时候(例如:视频,下载等)给出一些提示. 在用户视频期间用户切换网络的时候给出是否继续观看的提示! 下面笔者就给出一种可以实时监控网络状态改变的方法! 笔者使用的是网络流传最广的网络监控类:R