WebSocket总结知识点

目录

WebSocket

为什么使用websocket?

短连接(连接 —> 传输数据 —> 关闭连接)

长连接(连接 —> 传输数据 —> 保持连接 —> 传输数据 —> 关闭连接)

单工

半双工

全双工

webSocket(webSocket与http的区别)

请求报文(和HTTP请求报文类似,但定义了一系列新的header域)

响应报文

数据帧的格式

webSocket和Ajax轮询,long poll的区别

webSocket与socket的区别


WebSocket

        webSockt是HTML5的新协议,应用层协议,支持持久连接(长连接),全双工双向通信,允许跨域访问。websocket沿用http的端口,目的是为了骗过防火墙。WS的默认端口是80,WSS是443(wss协议是WebSocket使用SSL/TLS加密后的协议,类似HTTP和HTTPS的关系。

为什么使用websocket?

        websocket协议是为了解决HTTP双向通信和服务端主动推送的不足。而专门制定的一种全双工实时通信的应用层协议。websocket能够提供低延迟,高性能的客户端与服务端的双向数据通信。它颠覆了之前web开发的请求-响应模式,实现了服务器端主动推送的功能。是真正的双向平等对话,特别适合实时数据交互的场景

短连接(连接 —> 传输数据 —> 关闭连接)

        HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。HTTP协议连接是建立在TCP/IP协议之上的,HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

        例如普通的web请求,在三次握手之后建立连接,发送数据包并得到服务器返回的结果之后,通过客户端和服务端的四次握手进行关闭断开。客户端发送一个request和接收一个response。(request=response)

长连接(连接 —> 传输数据 —> 保持连接 —> 传输数据 —> 关闭连接)

        从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,需要使用Connection:keep-alive。客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

        区别于短连接,由于三次握手连接及四次握手断开,在请求频繁的情况下,连接请求和断开请求的开销较大,影响效率。采用长连接方式,执行三次握手连接后,不断开连接,保持客户端和服务端通信,直到服务器超时自动断开连接,或者客户端主动断开连接。

客户端可以发送多个Request,接收多个Response。但是一个request只能有一个response。(request=response)

单工

数据只在一个方向上传输,不能实现双方通信

半双工

允许数据在两个方向上传输,但是同一时间数据只能在一个方向上传输,其实际上是切换的单工。

全双工

允许数据在两个方向上同时传输。

webSocket(webSocket与http的区别)

Http/1.0:短连接,一次请求建立一次TCP连接,传递数据后断开。(request=response,一次),半双工通信。

缺点:资源消耗大,每次请求都要建立连接;无状态,每次请求都要发送请求行,请求头,请求体,需要服务器解析;效率低,半双工通信,同一时刻只能一个方向上有动作;被动,只能由客户端给服务端发送请求。

实现长连接方式:轮询

Http/1.1:长连接,只需要建立一次连接就能进行多次请求,超时后断开。(request=response,多次),半双工通信。

缺点:效率低,半双工通信,同一时刻只能一个方向上有动作;被动,只能由客户端给服务端发送请求。

Http/2.0:全双工,一个消息发送后不用等待接受,第二个消息可以直接发送。

缺点:被动,只能由客户端给服务端发送请求。

websocket:长连接,是基于HTTP/1.1协议的,借用HTTP协议完成一次连接请求(直连)。websocket只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道就可以进行数据的传送了。整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,减少了解析请求信息的效率问题。全双工双向通信,服务端可以主动推送数据给客户端。WS连接建立之后,数据的传输使用帧来传递,不再需要Request消息,数据帧有序。

工作原理:WS协议通信由两阶段组成:握手阶段和数据传输阶段

  • 握手阶段利用http协议建立连接。
  • 握手完成后的数据传输阶段就使用websocket协议,底层利用TCP实现可靠的数据传输。

请求报文(和HTTP请求报文类似,但定义了一系列新的header域)

GET ws://echo.websocket.org/chat HTTP/1.1
Host: echo.websocket.org 
Connection: Upgrade      
Upgrade: websocket     
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==      
Origin: http://websocket.org          
Sec-WebSocket-Protocol: chat, superchat     
Sec-WebSocket-Version: 13
  • Connection的值必须是Upgrade,Upgrade的值必须是websocket, 表示将当前连接升级到websocket连接。
  • Sec-WebSocket-Key:客户端生成的一个key,服务器通过这个key和固定的算法生成一个新的key返回给客户端。客户端校验通过后才能建立连接。
  • Sec-WebSocket-Protocol: jsonrpc,jsonrpc;websocket协议采用jsonrpc和jsonrpc进行通信
  • Origin:作安全使用,防止跨站攻击,浏览器一般会使用这个来标识原始域
  • Sec-WebSocket-Version:是websocket的版本号

响应报文

HTTP/1.1 101 Switching Protocols
Server: WebSockify Python/2.6.6
Date: Wed, 27 May 2020 03:03:21 GMT
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: hXXXXXXXXXXXXXXxGmM=
Sec-WebSocket-Protocol: binary

返回的状态码为101,表示同意客户端协议转换请求,并将它转换为websocket协议。接下来得到交互将用websocket数据帧进行。

Sec-WebSocket-Accept:这个就是用客户端发送的 Sec-WebSocket-Key和固定算法生成的一个key,发给客户端校验,校验通过则连接建立成功。

数据帧的格式

        WebSocket 用的是二进制帧,不过 WebSocket 和 HTTP/2.x 的关注点不同,WebSocket 更侧重于“实时通信”,而 HTTP/2 更侧重于提高传输效率

webSocket和Ajax轮询,long poll的区别

        Ajax技术可达到全双工通信,却需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;XHR技术受到域的限制,而WebSocket允许跨域通信;long poll 其实原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型,也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。

ajax轮询需要服务器有很快的处理速度和资源。(速度)

long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)

由于HTTP是非状态性的,每次都要重新传输identity info(鉴别信息),来告诉服务端你是谁。

webSocket与socket的区别

        socket为套接字,是计算机之间进行通信的一种约定或一种方式,封装了TCP/IP协议,是一个接口。socket起源Unix,可以用“打开open -> 读写write/read -> 关闭close” 模式来操作。Socket代表了在操作系统中传输数据的两方,它并不是什么协议,只是它不再基于网络协议,而是操作系统本身的文件系统

区别:

    1. socket是传输控制层的接口,用户可以通过socket来操作系统底层TCP/IP协议通信。
    2. webSocket是一个完整的应用层协议
    3. Socket更灵活,WebSocket更易用
    4. 两者都能做即时通讯
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值