iOS 即时通讯XMPP

现在很多社交软件都很火,FaceBook、易信、陌陌等,QQ、微信当然依然是中文社交最大霸主。除此之外伙星也很火。除了社交软件用到即时通讯,商城类的软件也会涉及到买家与卖家的商谈,还有美食类软件,一般都会有评论,有用户之间的交流等等,几乎有用户资源的软件都会有即时通讯的需求。因此,即时通讯也是很重要的,不管目前所在的公司是否重视,但作为一个开发者不得小视。今天给大家聊一下即时通讯相关的内容。大家可以相互交流学习一下。

一、定义

XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。

通俗的来说,其实XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接收的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。

二、基本网络结构

XMPP中定义了三个角色,客户端,服务器,网关,通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,基本的网络形式是单客户端通过TCP/IP,UDP连接到单服务器,然后在之上传输XML

三、功能

传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本

四、优缺点        OpenFire服务器

优点:XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现。XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。

缺点:XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。

五、第三方


即时通讯开发通常都是用的第三方,目前主要有环信、融云。

1.环信:http://www.easemob.com

目前创建群组支持的配置属性有:

1 群名称

2 群描述

3 群人数(不支持修改,目前上限为2000人)

4 群类型(即上面提到的四种群组类型)

群组分4种类型,目前SDK不支持自主选择是否进群。我们将针对每种类型讲解加入群组要进行的操作。

1 eGroupStyle_PrivateOnlyOwnerInvite 该类型的群组只允许群主(owner)添加人进群,其他人无法主动加入。

2 eGroupStyle_PrivateMemberCanInvite (推荐使用),该类型的群组允许所有群成员添加人进群,其他人无法主动加入。

3 eGroupStyle_PublicJoinNeedApproval (推荐使用),该类型的群组只允许群主(owner)添加人进群;其他人想进入群组的话,需要先发送申请,群主同意申请之后才能进群;其他人无法主动加入。

4 eGroupStyle_PublicOpenJoin (不推荐使用),该类型的群组允许任何人主动加入群组。

聊天室”模型:

1 进入聊天页面之前,进行加入聊天室操作;

2 成功进入聊天室之后,服务器会自动给推10条消息;

3 离开聊天页面之后,进行退出聊天室操作;

4 聊天室创建者owner可以进行退出聊天室操作;

5 支持最大成员5000;

6 环信的聊天室内仅有owner和游客;

7 不支持客户端建立聊天室;

8 不支持客户端邀请;

9 不支持REST邀请;

10 聊天室内成员离线后,服务器当监听到此成员不在线后不在会给此成员再发推送。

2.融云:http://www.rongcloud.cn

借助第三方开发一般 只有SDK文档能够读懂,开发方面都没有太大问题,除非官方网站很久没更新文档了,新的界面和文档对不上或者有很多的错误。这才是最坑的。所以这方面平时多看有坑的就需要借助论坛来解决了,大家的力量才是巨大的。


下面介绍一下Socket相关概念

一、概念

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端就被称为一个socket

Socket的英文原意指的是“孔”或者“插座”,专业术语被称为“套接字”,用于描述IP地址和端口,可以用来实现不同虚拟机或不同计算机之间的通信。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

二、举例说明

比如:Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务

对于一个网络连接来说,套接字是平等的,并没有差别,不会因为是服务器端或者客户端而产生不同的级别。

三、主要参数

区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号,通过将这三个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

Socket可以看成两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与网络驱动建立关系。此后,应用程序发送给Socket的数据,由Socket交给网络驱动程序向网络上发送出去,计算机从网络上收到与该Socket绑定IP地址和端口号相关的数据后,由网络驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据,网络应用程序就是这样通过Socket进行数据的发送与接收。

三、连接过程

要通过Internet进行通信,至少需要一对套接字,其中一个运行在客户端,称之为ClientSocket,另一个运行在服务器端,称之为ServerSocket,根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认

(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态

(2)客户端请求: 是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字,为此,客户端的套接字必须首先描述他要连接的服务器的套接字,指出服务器端套接字的IP地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:是指服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了,而服务器端套接字仍然处于监听状态,继续接收其他客户端套接字的连接请求

四、数据处理

使用套接字进行数据处理有两种基本模式:同步模式和异步模式

(1) 同步模式:特点是在通过Socket进行连接、接收、发送数据时,客户机和服务器在接收对方响应前会处于阻塞状态,即一直等待收到对方请求后才继续执行下面的语句,如此可见,同步模式只适用于数据处理不太多的场合,当程序执行的任务很多时,长时间的等待可能会让用户无法忍受。

(2) 异步模式:特点是在通过Socket进行连接、接收、发送操作时,客户机和服务器不会处于阻塞方式,而是利用callback机制进行连接、接收、发送处理,这样就可以在调用发送或接收的方法后直接返回,并继续执行下面的程序,由此可见,异步套接字特别适用于进行大量数据处理的场合。

五、TCP和UDP

TCP和UDP的区别  各有什么优缺点

1、TCP

TCP(传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须经过三次“对话”才能建立起来,其中的过程非常复杂,简单地过程如下:

A —> B  主机A向主机B发出连接请求数据包,这是第一次对话

A <—B 主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作),这是第二次对话

A —> B 主机A再发出一个数据包确认主机B的要求同步,这是第三次对话

TCP接通连接要进行3次握手过程  🌟

1、主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,

主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.

2、 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我

3、 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:我已收到回复,我现在要开始传输实际数据了

这样3次握手就完成了,主机A和主机B 就可以传输数据了.

三次握手的特点:没有应用层的数据;

SYN这个标志位只有在TCP建立连接时才会被置1;

握手完成后SYN标志位被置0

涉及到的名词解释:

ACK TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段

都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.

SYN 同步序列号,TCP建立连接时将这个位置1

FIN 发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1

2、UDP

UDP(用户数据报协议)是非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

UDP的特点:

1)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

2) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。 3)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制

4)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。

5)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

3、TCP和UDP的区别

1.基于连接与无连接; 2.对系统资源的要求(TCP较多,UDP少); 3.UDP程序结构较简单; 4.流模式与数据报模式 ;

5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

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

推荐阅读更多精彩内容

  • 转自 TCP/IP,Http,Socket,XMPP的区别网络由下往上分为 物理层、数据链路层、网络层、传输层、会...
    ZMJun阅读 1,335评论 1 10
  • 定义 网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议主要由三个要素组成:语义、语法及时...
    FlyAndroid阅读 922评论 0 10
  • 参考:http://www.2cto.com/net/201611/569006.html TCP HTTP UD...
    F麦子阅读 2,903评论 0 14
  • 这两天,各种传媒板块都被青年演员乔任梁辞世的新闻给刷了屏,尽管有些媒体口口声声说逝者为大,不要去刻意如何如何,但某...
    勃然沧海阅读 118评论 0 0
  • 我总感觉,人啊,不能老闲着,闲着,就会闲出毛病。我所在的公司,辛辛苦苦一个月,这个繁忙的6月,终于是在不久前远走,...
    文君1阅读 201评论 0 1