websocket

websocket

websocket是为了解决HTTP协议中的一些问题。因为HTTP是无状态,短连接。

HTTP协议下,客户端主动连接服务端;客户端发起一次请求,服务端返回一次响应。也就是说,客户端没有发起请求的时候,服务端是不能主动给客户端返回响应的。

websocket解决了这个问题,它将创建一个持久连接,然后客户端和服务器基于这个连接可以进行收发数据。

websocket是建立在HTTP协议之上的(这是为了兼容现有浏览器),websocket的连接是由浏览器发起,这个连接是建立在TCP协议之上的。在握手阶段采用HTTP协议。
下面来看一个请求实例。
在这里插入图片描述
我们来一一解读一些关键点。
General

  1. Request URL: ws://localhost:8000/ws
    协议变了,从HTTP变成了ws.
  2. Status Code: 101 Switching Protocols
    服务端返回101状态码,表示服务器应客户端升级协议的请求对协议进行切换。

Response Headers

  1. Connection: Upgrade
    该字段如果为Upgrade,则表示协议升级
  2. Upgrade: websocket
    该字段表示升级后的协议,例如这里的websocket.
  3. Sec-WebSocket-Accept: mXiTS1gdAOfW1eBr91jIGsv71J4=
    Sec-WebSocket-Accept 是经过服务器确认,并且加密过后的 Sec-WebSocket-Key(Sec-WebSocket-Key是客户端在请求的时候携带的参数)。服务器接受处理后将Sec-WebSocket-Key设置的字符串和固定UUID(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)连接起来,再经过SHA-1散列(160位)、base-64编码设置到服务器的响应报文Sec-WebSocket-Accept中返回给客户端。
  4. Sec-WebSocket-Extensions: permessage-deflate
    Sec-WebSocket-Extensions是客户端在发起请求的时候携带的扩展参数,服务器会根据自身情况和客户端协商,然后返回协商结果。

Request Headers

  1. Connection: Upgrade
    客户端请求服务器段对连接进行升级
  2. Upgrade: websocket
    Connection请求升级,但是没有说升级为什么协议,Upgrade指明了升级的协议
  3. Sec-WebSocket-Version: 13
    这是告诉服务器所使用的websocket协议的版本
  4. Sec-WebSocket-Key: iWGEKNbNdeLvB0OdelWHLA==
    Sec-WebSocket-Key是一个base64 编码的密文,服务器拿到这个值之后,然后加密。作为Sec-WebSocket-Accept 的值返回给客户端
  5. Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
    客户端发生给服务器的扩展字段

以上过程都是利用http通信完成的,称之为websocket协议握手(websocket Protocol handshake),经过握手之后,客户端和服务端就建立了websocket连接,以后的通信走的都是websocket协议了。

总结为websocket握手需要借助于http协议,建立连接后通信过程使用websocket协议。同时需要了解的是,该websocket连接还是基于我们刚才发起http连接的那个TCP连接。一旦建立连接之后,我们就可以进行数据传输了,websocket提供两种数据传输:文本数据和二进制数据。

到这里大家又都基本明白了,为什么叫做“websocket”,因为这个东西本质上就是借鉴socket的思想来实现的。在传输数据之前,必须要先建立连接。当连接一旦建立,那么客户端就可以和服务器直接通信了。

websocket挺好的,就是低版本的浏览器不支持。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值