WebSocket 学习笔记

128 阅读2分钟

对 WebSocket 做了一个了解并记录,有理解不当的地方还望指出 😁😁

Why

Http 协议只能满足客户端发起请求的场景(单向请求),如果服务器有连续的状态变化,客户端要获知就非常麻烦。因此有了轮询,每隔一段时间就问一下服务器有没有信息,典型的场景是聊天室,但是轮询效率低下。当服务端数据发生改变时,希望服务端也能主动向客户端推送数据,因此又有了 websocket 协议

What

WebSocket 是一种网络通信协议,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,属于服务器推送技术的一种。

特点

  • 协议标识 ws,加密的是 wss
  • 兼容 HTTP 协议
  • 建立在 TCP 协议之上
  • 数据格式轻量
  • 没有同源策略
  • 可以发送文本/二进制数据(blob对象或Arraybuffer对象)

How

使用构造函数建立 WebSocket 实例,具体看 API 参考文档

客户端 API

WebSocket 构造函数、webSocket.readyState、webSocket.onopen、webSocket.onclose、webSocket.onmessage、webSocket.send、webSocket.bufferedAmount(还有多少数据没发送出去)、webSocket.onerror

基本是一些回调函数方法,有一些和 Ajax 的很像 🤔🤔,直接查 API,文章底部阮一峰老师的文章也有做介绍。

服务器端的实现

WebSocket 服务器:Websocketd

阮一峰老师的文章有做介绍,还没实操,仅做了解

WebSocket 与 Ajax的区别

本质不同

  • Ajax 即异步 JavaScript 和 XML,是一种创建交互式网页的应用的网页开发技术
  • websocket 是 HTML5 的一种新协议, 实现了浏览器和服务器的实时通信

生命周期不同

  • websocket 是长连接,会话一直保持
  • ajax 发送接收之后就会断开

适用范围

  • websocket 用于前后端 实时 交互数据
  • ajax 非实时

发起人

  • AJAX 客户端发起
  • WebSocket 服务器端和客户端相互推送

长轮询和短轮询

WebSocket 是长轮询。具体比如在一个电商场景,商品的库存可能会变化,所以需要及时反映给用户,所以客户端会不停的发请求,然后服务器端会不停的去查变化,不管变不变,都返回,这个是短轮询。而长轮询则表现为如果没有变,就不返回,而是等待变或者超时(一般是十几秒)才返回,如果没有返回,客户端也不需要一直发请求,所以减少了双方的压力。

文章参考

阮一峰老师的文章