iOS 即时通讯常用一些概念

近期要开发即时通讯,先看了理论概念,总结一下。

即使通讯一般涉及到的协议是传输层协议和应用层协议,传输层有TCP连接和UDP连接,先简单的说下2者的区别:

    1.TCP需要三次握手建立连接,而UDP不需要建立连接,所以TCP属于可靠的传输协议,UDP是一种不可靠的传输

协议,UDP所谓的连接相当于一种影射,UDP单方面认为目标地址(端口)是可用的,从而首发数据,而实际是未

必可用,所以传输不可靠。由于TCP需要建立真实的连接,所以需要消耗服务器的负载大于UDP。

从二者的区别中能够总结出:在做即时通讯的APP时,如果是信息量很大的APP就需要用UDP(例如QQ微信两种

协议都在用),如果聊天不用主打功能(或者是小公司技术不是很成熟的公司),用TCP就好了,因为UDP需要

做的事很多,比如传输可靠行和丢失数据包的问题。

    2.下一个用到的概念是socket,简单的说socket就是对传输层TCP和UDP一种封装,由于在编程的时候写TCP或者

UDP的代码太过底层,所以用C语言封装和传输层协议,暴露出接口供程序员调用。举个例子说明:TCP建立连接

的时候需要三次握手,在我们写client和server连接的时候三次握手就不用写了,在基于socket的一些框架中简单的

几行代码就能搞定(如CocoaAsyncSocket框架)。socket(又称套接字),包含进行网络通信必须的五种信息:

连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。建立socket

连接分成3个步骤:服务器监听,客户端请求,连接确认。

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

户端的连接请求。

客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先

描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一

个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套

接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

注意:socket不是协议

    3.HTTP协议:超文本传输协议,是基于TCP/IP协议基础之上的应用层协议,主要解决如何包装数据,详细

规定了C与S之间的通信的规则。HTTP连接使用的是请求响应的方式,不仅在请求时需要先建立连接,而且需要客

户端向服务器发出请求后,服务器端才能回复数据。很多情况下,需要服务器端主动向客户端推送数据,保持客户端与

服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是

HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连

接请求,不仅可以保持在线,同时也是在询问服务器是否有新的数据,如果有就将数据传给客户端。

   4.在开发即时通讯时可以选择使用第三方的IM服务(通讯量达到一定量要收费),也可以自己去实现。第三方服务商IM

底层协议基本上都是TCP。他们的IM方案很成熟,我们甚至不需要自己去搭建IM后台,什么都不需要去考虑。另一种是

自己去实现:1.基于Scoket原生:代表框架 CocoaAsyncSocket。2.基于WebScoket:代表框架 SocketRocket3.基于

MQTT:代表框架 MQTTKit4.基于XMPP:代表框架 XMPPFramework

    5.XMPP协议:XMPP是一个即时通讯的协议,它规范了用于即时通信在网络上数据传输格式的,比如登录,获取好友

列表等等的格式。XMPP在网络传输的数据是XML格式比如登录:把用户名和密码放在xml的标签中,传输到服务器。XMPP

是一个基于Socket通过的网络协议,目的是为了保存长连接,以实现即时通讯功能XMPP的客户端是使用一个XMPPFramework

框架实现XMPP的服务器是使用Openfire,一个开源的服务器客户端获取到服务器发送过来的好友消息,客户端需要

XML进行解析,使用的解析框架的KissXML框架,而不是NSXMLParser/GDataXML。但是好像发送图片和语音文件时比较麻烦。

     6.第三方IM比如环信:环信是一个即时通信的服务提供商环信使用的是XMPP协议,它是再XMPP的基础上进行二次开发,对服

务器Openfire和客户端进行功能模型的添加和客户端SDK的封装,环信的本质还是使用XMPP,基本于Socket的网络通信环信内部

实现了数据缓存,会把聊天记录添加到数据库,把附件(如音频文件,图片文件)下载到本地,使程序员更多时间是花到用户即时体

验上。环信内部已经实现了视频,音频,图片,其它附件发送功能,环信使用公司可以节约时间成本不需要公司内部搭建服务器客户

端的开发,使用环信SDK比使用XMPPFramework更简洁方便。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS开发中,有许多常用的库和框架可以帮助开发者提高效率和加速开发过程。以下是一些常用的库和框架: 1. Alamofire:一个简洁的网络请求库,提供了一种优雅的方式来进行网络请求和处理响应。 2. SDWebImage:一个用于异步加载和缓存网络图片的库,可以帮助提高图片加载性能,并且具有内存和磁盘缓存机制。 3. AlamofireImage:一个基于Alamofire的图片加载库,提供了一些便捷的方法来加载网络图片并进行缓存。 4. SwiftyJSON:一个轻量级的、灵活的JSON解析库,可以帮助简化处理JSON数据的过程。 5. SnapKit:一个优雅的、轻量级的Auto Layout框架,使用Swift语言提供了一种简化UI布局代码的方式。 6. Realm:一个移动数据库框架,提供了高效的数据存储和查询功能,并且支持对象关系映射(ORM)。 7. AlamofireObjectMapper:一个将Alamofire与ObjectMapper结合使用的库,可以方便地将JSON数据映射到模型对象中。 8. Kingfisher:一个用于异步加载和缓存网络图片的库,具有高性能和功能丰富的特点。 9. RxSwift:一个用于响应式编程的库,可以简化异步编程和事件处理的复杂性。 10. IQKeyboardManager:一个用于处理键盘弹出和收起的库,可以自动管理键盘,提供了一种简单的方式来避免键盘遮挡输入框的问题。 这只是一小部分常用的库和框架,iOS开发中还有许多其他优秀的工具可供选择,根据具体需求选择合适的库和框架进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值