websocket 基础概念

2020-05-23  本文已影响0人  楚江云

websocket是什么

WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型应用层。WebSocket协议在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范。Web IDL中的WebSocket API由W3C标准化。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。

通过上述对websocket的定义,我们知道如下几个关于websocket特点:

  • websocket 是一种网络传输协议
  • websocket 是基于tcp 协议的
  • websocket 是全双工的 (客户端和服务端都可以主动通信)
  • websocket 是持久性连接

补充关于websocket 的特点 :

  1. 大部分编程语言都能实现websocket服务端和客户端
  2. websocket 协议得到了当前绝大部分浏览器的支持(web浏览器作为websocket的客户端)
  3. 与http协议兼容,默认的工作端口是 80(http)443(https)

websocket 是一个应用层协议 , 但是websocket必须依赖HTTP协议进行第一次握手 , 握手成功之后数据直接从TCP通道传输 , 此时就和HTTP无关了

websocket 连接示例

如下展示的数据是通过浏览上的调试模式获取 (websocket客户端 连接 websocket服务端)

General
Request URL: ws://127.0.0.1/echo
Request Method: GET
Status Code: 101 Switching Protocols

Response Headers
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: c/LP8JsVmZWV/EB3lgGDVmVQWVA=

Request Headers
GET ws://127.0.0.1/echo HTTP/1.1
Host: 127.0.0.1
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Upgrade: websocket
Origin: http://127.0.0.1:5500
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Sec-WebSocket-Key: rRXp2i/XCuCsKqs5MN12Ag==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

解释 :

101 Switching Protocols : 101状态码是switching protocols,表示服务器已经理解了客户端的请求,并将通过Upgrade子段通知客户端采用WebSocket协议来完成这个请求

Connection: Upgrade 的值必须是 upgrade 表示请求升级

Upgrade: websocket 的值必须设置成 websocket 表示升级为websocket 协议

Sec-WebSocket-Version: 13 表示支持的websocket的版本

Sec-WebSocket-Key 发给服务端的随机字符串

Sec-WebSocket-Accept 响应给客户端的值

websocket使用场景

websocket 的使用场景和其特点紧密相关的

websocket 可以使用的场景如社交聊天 , 弹幕 , 多人游戏 ,文字直播 等等,其实之本质是 高实时性 的数据传输

websocket和http的区别

websocket.png

相同点 :

  1. 都是基于TCP 协议
  2. 都有加密传输 wswss , httphttps
  3. 都是应用层协议

不同点 :

  1. websocket 是双工通信协议 , http 但是单向协议

某种意义上来说websocket 补上了http的一些不足

参考资料

- [1] websocket 百度百科

- [2] websocket 教程

- [3] websocket维基百科

上一篇下一篇

猜你喜欢

热点阅读