websocket 原理及ios下的应用
- 一、websocket是什么?
- 二、websocket有哪些应用场景?
- 三、websocket底层原理
- 3.1 握手阶段
- 3.2 传输阶段
- 四、websocket 在ios中的相关框架
- 五、websocket在ios中的简单应用 (SocketRocket 为例)
- 六、参考
一、websocket是什么?
百度百科定义:
WebSocket 是
独立的、创建在TCP上的协议。
Websocket 通过HTTP/1.1 协议的101状态码进行握手。
为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(handshaking)。
通过上面的定义,我们可以得出一个结论:
WebSocket = “HTTP第1次握手” + 基于TCP协议的
“全双工“通讯的网络协议
建立WebSocket连接的过程如下:
- 首先,通过HTTP协议的第一次握手保证浏览器与服务器连线成功
- 再者,通过TCP协议实现浏览器与服务器之间的
全双工通讯 (通过心跳机制保持连接)
最终,使得“服务端”拥有主动发信息给“客户端”的能力。
二、websocket有哪些应用场景?
最常见的场景之一肯定是: IM即时通讯 。 像:QQ、微信等, 当然仅仅依靠WebSocket肯定不够,各大厂都有自己相应的优化方案
此外还有像 联机游戏、股票/基金等金融交易平台的实时数据刷新、还有协同办公等等
三、websocket底层原理
Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。即:websocket分为握手和数据传输二个阶段,即进行了HTTP握手 + 双工的TCP连接。
3.1 握手阶段
客户端发送消息:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Version: 13
服务端返回消息:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
这里值得注意的是Sec-WebSocket-Accept的计算方法:
base64(hsa1(sec-websocket-key + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11))
- 如果这个Sec-WebSocket-Accept计算错误浏览器会提示:
Sec-WebSocket-Accept dismatch - 如果返回成功,Websocket就会回调
onopen事件
3.2 传输阶段
更多内容请跳转至 https://blog.csdn.net/zhanglei5415/article/details/129881999 阅读
相关推荐
IOS WEBSOCKET Objective-C实现
IOS WEBSOCKET Objective-C实现,有服务器部分和客户端部分,实现非常简单,随后我们还会增加C版本的夸端实现代码;
ios websocket 使用详解
负载数据的长度为扩展数据及应用数据之和,扩展数据的长度可能为0,因而此时负载数据的长度就为应用数据的长度。Extension data: x位,如果客户端与服务端之间没有特殊约定,那么扩展数据的长度始终为0,任何的扩展都必须指定扩展数据的长度,或者长度的计算方式,以及在握手时如何确定正确的握手方式。如果存在扩展数据,则扩展数据就会包括在负载数据的长度之内。即:websocket分为。Application data: y位,任意的应用数据,放在扩展数据之后,应用数据的长度=负载数据的长度-扩展数据的长度。
iOS开发项目- 基于WebSocket的聊天通讯(2)
主要介绍了iOS开发项目- 基于WebSocket的聊天通讯,可以实现录音和音乐播放,有需要的可以了解一下。
iOS开发项目- 基于WebSocket的聊天通讯(1)
主要介绍了iOS开发项目- 基于WebSocket的聊天通讯,WebSocket是web通信方式的一种,有需要的可以了解一下。
SocketRocket封装的Websocket
iOS 移动端的Websocket使用,SocketRocket框架将Websocket长连接框架已经封装实现到移动端。二次封装后即可使用


