这是我参与「第四届青训营 」笔记创作活动的第6天
websocket
- WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
- 它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
- Websocket是一个持久化的协议
使用websocket可以在服务器与客户端之间建立一个非HTTP的双向连接,这个连接是实时的也是永久的,除非被显式关闭。服务器可以随时将消息推送到客户端。
它是一个新的基于TCP的的应用层协议,只需要一次连接,以后的数据不需要重新建立连接,可以直接发送,它是基于TCP的,属于和HTTP相同的地位。
它的最大特点就是,服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送消息,是真正的双向平等对话, 属于服务器推送技术的一种。
Websocket的特点
建立在TCP协议上,服务器端的实现比较容易 与HTTP协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用HTTP协议,因此握手时不容易屏蔽,能通过各种HTTP代理服务器。 数据格式比较轻量,性能开销小,通信高效。 可以发送文本,也可以发送二进制数据。 没有同源限制,客户端可以与任意服务器通信。 协议标识符是ws(如果加密,则为wss),服务器网址就是URL.
websocket与http的关系
相同点:
| 相同点 | 不同点 |
|---|---|
| 都是基于tcp的,都是可靠性传输协议 | WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息 |
| 都是应用层协议 | HTTP是单向的 |
| WebSocket是需要浏览器和服务器握手进行建立连接的 | |
| 而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接 |
WebSocket连接过程
客户端发起HTTP握手,告诉服务器端进行WebSocket协议通讯,并告知WebSocket协议版本。服务器端确认协议版本,升级为WebSocket协议。之后如果有数据需要推送,会主动推送给客户端。
连接开始时,客户端使用HTTP协议和服务器端升级协议,升级完成后,后续数据交换遵循WebSocket协议。
返回实例对象的属性
-
WebSocket.onopen: 连接成功后的回调
-
WebSocket.onclose: 连接关闭后的回调
-
WebSocket.onerror: 连接失败后的回调
-
WebSocket.onmessage: 客户端接收到服务端数据的回调
-
webSocket.bufferedAmount: 未发送至服务器的二进制字节数
-
WebSocket.binaryType: 使用二进制的数据类型连接
-
WebSocket.protocol : 服务器选择的下属协议
-
WebSocket.url : WebSocket 的绝对路径
-
WebSocket.readyState: 当前连接状态,对应的四个常量
-
WebSocket.close() 关闭当前连接
-
WebSocket.send(data) 向服务器发送数据