现在很多社交软件都很火,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不保证。