webSocket;fetch;FormData类型;XMLHttpRequest对象;
疑问:
- webSocket是轮询的代替方案?
- 都全双工双向通信了,还轮询个锤子。
为什么不都使用webSocket算了
内容都由框架封装,实际接触的可能性很小,且内容大多偏工具
-
FormData类型
XHR对象:XMLHttpRequest对象
- 是一种http请求对象,应该已经不常用了
- 和ajax有关
- FormData常用于XHR对象的请求交互中
- 使用FormData类型后,不再需要给XHR对象显式设置任何请求头部
- fetch vs XHR:https://blog.csdn.net/u011413061/article/details/51932295
- FormData类型便于表单序列化,也便于创建与表单类似格式的数据然后通过XHR发送。
-
fetch
是基于promise的
- 所以说fetch/promise代替了ajax:传统ajax就是指XMLHttpRequest,而fetch是基于promise的
- Fetch API本身是使用JavaScript请求资源的优秀工具,同时这个API也能够应用在服务线程(service worker)中,提供拦截、重定向和修改通过fetch()生成的请求接口。
- fetch()方法是暴露在全局作用域中的,包括主页面执行线程、模块和工作线程。
- 所以可以随便用
请求完成、资源可用时,期约会解决为一个Response对象。
示例
1、发送JSON数据
2、在请求体中发送参数
3、发送文件
4、加载Blob文件
5、中断请求
6、直接传入Request对象
注意不能传入已使用过的Request对象webSocket
通过一个长时连接实现与服务器全双工、双向的通信。
let socket = new WebSocket('ws://www.example.com');
工作原理
- 在JavaScript中创建Web Socket时,一个HTTP请求会发送到服务器以初始化连接。
- 服务器响应后,连接使用HTTP的Upgrade头部从HTTP协议切换到WebSocket协议。
- 这意味着Web Socket不能通过标准HTTP服务器实现,而必须使用支持该协议的专有服务器。
- 使用了自定义协议:不能再使用http://或https://,而要使用ws://和wss://。
- ws://开头,很眼熟是不是,这是在docker+browserless环境中用puppeteer发起请求的链接头部!
- 优点:客户端与服务器之间可以发送非常少的数据
- 缺点:定义协议的时间比定义JavaScript API要长
- 同源策略不适用于WebSocket,因此可以打开到任意站点的连接。
- WebSocket有一个readyState属性表示当前状态。
- ❑ WebSocket.OPENING(0):连接正在建立。
- ❑ WebSocket.OPEN(1):连接已经建立。
- ❑ WebSocket.CLOSING(2):连接正在关闭。
- ❑ WebSocket.CLOSE(3):连接已经关闭。
- 任何时候都可以调用socket.close关闭连接
- readyState会立刻变成2,关闭后变为3
发送/接收数据
- socket.send:发送数据,可发送字符串、ArrayBuffer或Blob
- socket.onmessage:接收数据
let socket = new WebSocket('ws://www.example.com');
let stringData = "Hello World";
// 发送
socket.send(stringData);
// 接收
socket.onmessage = funciton(event) {
let data = event.data;
// code
}
// 关闭连接
socket.close();
其他事件
- ❑ open:在连接成功建立时触发。
- ❑ error:在发生错误时触发。连接无法存续。
- ❑ close:在连接关闭时触发。