iOS即时通讯 WebSocket Socket

WebSocket协议原理

Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。

Websocket的数据传输是frame形式传输的,比如会将一条消息分为几个frame,按照先后顺序传输出去。这样做会有几个好处:

1 大数据的传输可以分片传输,不用考虑到数据大小导致的长度标志位不足够的情况。
2 和http的chunk一样,可以边生成数据边传递消息,即提高传输效率

WebSocket 和 Socket的区别与联系

Socket 其实并不是一个协议。它工作在 OSI 模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是 TCP 或 UDP )而存在的一个抽象层。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。

Socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket,一个Socket由一个IP地址和一个端口号唯一确定。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。

Socket在通讯过程中,服务端监听某个端口是否有连接请求,客户端向服务端发送连接请求,服务端收到连接请求向客户端发出接收消息,这样一个连接就建立起来了。客户端和服务端也都可以相互发送消息与对方进行通讯,直到双方连接断开。

所以基于WebSocket和基于Socket都可以开发出IM社交聊天类的app

iOS即时通讯

我们自己去实现也有很多选择:
1)首先面临的就是传输协议的选择,TCP还是UDP?
2)其次是我们需要去选择使用哪种聊天协议:1.基于Scoket或者WebScoket或者其他的私有协议?2.MQTT?3.还是广为人诟病的XMPP?
3)我们是自己去基于OS底层Socket进行封装还是在第三方框架的基础上进行封装?
4)传输数据的格式,我们是用Json、还是XML、还是谷歌推出的ProtocolBuffer?
5)我们还有一些细节问题需要考虑,例如TCP的长连接如何保持,心跳机制,Qos机制,重连机制等等...当然,除此之外,我们还有一些安全问题需要考虑。

一、传输协议的选择

对于小公司或者技术不那么成熟的公司,IM一定要用TCP来实现,因为如果你要用UDP的话,需要做的事太多。当然QQ就是用的UDP协议,当然不仅仅是UDP,腾讯还用了自己的私有协议,来保证了传输的可靠性,杜绝了UDP下各种数据丢包,乱序等等一系列问题。
总之一句话,如果你觉得团队技术很成熟,那么你用UDP也行,否则还是用TCP为好。

二、我们来看看各种聊天协议

首先我们以实现方式来切入,基本上有以下四种实现方式:
1.基于Scoket原生:代表框架 CocoaAsyncSocket。
2.基于WebScoket:代表框架 SocketRocket。
3.基于MQTT:代表框架 MQTTKit。
4.基于XMPP:代表框架 XMPPFramework。
当然,以上四种方式我们都可以不使用第三方框架,直接基于OS底层Scoket去实现我们的自定义封装。下面我会给出一个基于Scoket原生而不使用框架的例子,供大家参考一下。

首先需要搞清楚的是,其中MQTT和XMPP为聊天协议,它们是最上层的协议,而WebScoket是传输通讯协议,它是基于Socket封装的一个协议。而通常我们所说的腾讯IM的私有协议,就是基于WebScoket或者Scoket原生进行封装的一个聊天协议。

所以说到底,iOS要做一个真正的IM产品,一般都是基于Scoket或者WebScoket等,再之上加上一些私有协议来保证的。

微信,QQ这类IM app怎么做——谈谈Websocket
iOS即时通讯,从入门到“放弃”?(demo)
iOS即时通讯,从入门到“放弃”?(文档)
感谢大神涂耀辉

你可能感兴趣的:(iOS即时通讯 WebSocket Socket)