webSocket简单介绍

首先介绍一下不使用webSocket的聊天室的结构,我们知道http协议是短连接协议,正常在使用中就是数据请求发给后台,后台响应并将数据发送给前台,这是一次交互。而在这种情况下想要实现正常的信息交互就必须要在后台设置监听事件,一直监听着有没有请求有没有发送新的数据,如果有在进行转发,如果我只是发送一句话就必须走完一套程序才可以,这样的开销是很大的。而对于webSocket而言它使一种长链接和服务器连接,理想情况下可以很服务器连接很长时间,这时和服务器的交互就会很便捷开销也会变小。

webSocket、http和TCP

从上面的图中可以看出,HTTP、WebSocket 等应用层协议,都是基于 TCP 协议来传输数据的。我们可以把这些高级协议理解成对 TCP 的封装。

既然大家都使用 TCP 协议,那么大家的连接和断开,都要遵循 TCP 协议中的三次握手和四次握手 ,只是在连接之后发送的内容不同,或者是断开的时间不同。

更详细内容可阅读:wireshark抓包图解 TCP三次握手/四次挥手详解

对于 WebSocket 来说,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。

WebSocket

WebSocket 协议在2008年诞生,2011年成为国际标准。现在所有浏览器都已经支持了WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。

HTTP 有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个 HTTP 请求合并为一个,但是 Websocket 其实是一个新协议,跟 HTTP 协议基本没有关系,只是为了兼容现有浏览器,所以在握手阶段使用了 HTTP 。HTTP 与 WebSocket 可以说是有交集的关系,但谁都不包含谁。

WebSocket 的其他特点:

  • 建立在 TCP 协议之上,服务器端的实现比较容易。
  • 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
  • 数据格式比较轻量,性能开销小,通信高效。
  • 可以发送文本,也可以发送二进制数据。
  • 没有同源限制,客户端可以与任意服务器通信。
  • 协议标识符是ws(如果加密,则为wss),服务器网址就是 UR

协议升级

 

  1. Connection:Upgrade:表示要升级的协议
  2. Upgrade: websocket:表示要升级到websocket协议
  3. Sec-WebSocket-Version: 13:表示websocket的版本
  4. Sec-WebSocket-Key:UdTUf90CC561cQXn4n5XRg== :与Response Header中的响应首部Sec-WebSocket-Accept: u1IRUiDR0daix+vYHGJNSg==是配套的,提供基本的防护,比如恶意的连接或者无意的连接。

    其中Connection就是我们前边提到的,客户端发送给服务端的信号,服务端接受到信号之后,才会对HTTP协议进行升级。那么服务端怎样确认客户端发送过来的请求是否是合法的呢?在客户端每次发起协议升级请求的时候都会产生一个唯一码:Sec-WebSocket-Key。服务端拿到这个码后,通过一个算法进行校验,然后通过Sec-WebSocket-Accept响应给客户端,客户端再对Sec-WebSocket-Accept进行校验来完成验证

当然在webSocket的设计中除了前面几篇文章中提及到的建立连接挂闭连接等,还有一些其他的功能,例如提到网络连接就不的不提的断线重连,当然在webSocket中的断线重连也很简单,只需要在关闭方法和报错方式处调用即可。之后还有一个比较重要的功能,心跳检测。就像他的名字一样心脏跳动是活着的一个证明,它就是用来告诉服务器我还“活着”,当然这里指的是依旧建立这链接。具体的功能实现就是定时向服务器发送一个数据包,如果发送成功并且接收到服务器响应那么就说明链接依旧建立。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值