发现宝藏
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。
WebSocket API 是一种基于 Web 的通信协议,它为浏览器和服务器之间提供了全双工(双向)通信通道,使得客户端和服务器可以在单个 TCP 连接上进行双向数据交换。WebSocket 在实时通信应用中尤其重要,例如在线聊天、实时游戏、股票价格更新、协作编辑等场景。
WebSocket API 简介
WebSocket API 允许浏览器和服务器之间建立一个持久的、双向的通信连接。WebSocket 连接一旦建立,数据可以在浏览器与服务器之间自由地流动,直到连接被关闭。
WebSocket 协议的特点:
- 全双工通信:WebSocket 提供双向的、实时的通信,服务器和客户端都可以随时发送消息。
- 低延迟:与传统的 HTTP 请求-响应模型不同,WebSocket 的通信不需要每次都重新建立连接,从而减少了通信延迟。
- 单一连接:WebSocket 使用单一的 TCP 连接来进行通信,这意味着可以节省带宽和计算资源。
WebSocket API 使用
WebSocket API 提供了简单的 JavaScript 接口,客户端通过该接口与 WebSocket 服务器进行交互。
1. 创建 WebSocket 连接
WebSocket 对象是建立与服务器连接的核心,它通过 WebSocket 构造函数来创建一个 WebSocket 实例。连接的建立需要指定一个服务器地址,该地址通常是一个以 ws://
或 wss://
(加密版本)开头的 URL。
javascript
let socket = new WebSocket('wss://example.com/socket'); // 使用 wss 进行加密连接
2. WebSocket 事件
WebSocket 对象触发多个事件,开发者可以监听这些事件来处理连接、消息接收、错误等情况。
open
:连接成功建立时触发。message
:收到服务器发送的消息时触发。error
:发生错误时触发。close
:连接关闭时触发。
示例代码
javascript
let socket = new WebSocket('wss://example.com/socket');
// 监听连接成功事件
socket.onopen = function(event) {
console.log('WebSocket is open now.');
// 可以在连接成功后发送消息
socket.send('Hello, server!');
};
// 监听接收到消息事件
socket.onmessage = function(event) {
console.log('Message from server:', event.data);
};
// 监听错误事件
socket.onerror = function(error) {
console.error('WebSocket Error:', error);
};
// 监听连接关闭事件
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Closed cleanly, code=${event.code}, reason=${event.reason}`);
} else {
console.error('Connection closed unexpectedly');
}
};
3. 发送消息
一旦 WebSocket 连接成功建立(即触发 open
事件),你可以使用 send()
方法向服务器发送数据。WebSocket 允许发送文本数据(如字符串)和二进制数据(如 Blob 或 ArrayBuffer)。
javascript
socket.send('Hello, server!');
4. 接收消息
当 WebSocket 服务器发送消息时,客户端会触发 message
事件,并可以通过 event.data
获取到消息内容。
javascript
socket.onmessage = function(event) {
console.log('Received:', event.data);
};
5. 关闭连接
WebSocket 连接可以通过 close()
方法主动关闭,也可以等待服务器主动关闭连接。关闭连接时,可以指定一个状态码和原因(可选)。
javascript
socket.close(1000, 'Done with the session');
1000
:表示正常关闭连接的状态码。'Done with the session'
:可以提供关闭的原因。
6. 状态码
WebSocket 连接关闭时,可以使用以下标准状态码来描述连接的关闭原因:
- 1000 - 正常关闭连接。
- 1001 - 服务器关闭连接。
- 1002 - 协议错误。
- 1003 - 服务器收到不支持的消息类型。
- 1006 - 连接意外关闭,通常是由于网络问题或客户端错误。
WebSocket 连接的生命周期
- 连接建立 :客户端通过
new WebSocket()
请求连接服务器,触发open
事件。 - 通信进行 :客户端和服务器可以通过
send()
和message
事件相互发送消息,保持通信。 - 关闭连接 :通信完成后,客户端或服务器可以调用
close()
方法关闭连接。
WebSocket 与传统 HTTP 的对比
特性 | WebSocket | HTTP |
---|---|---|
连接方式 | 持久连接(保持开放) | 短连接(每个请求都会新建连接) |
双向通信 | 支持全双工通信(客户端和服务器可以同时发送消息) | 单向通信(客户端请求,服务器响应) |
延迟 | 较低 | 较高,需每次建立连接 |
适用场景 | 实时通信(在线聊天、股票数据更新、多人游戏等) | 常规的请求-响应式应用 |
协议 | ws:// 或 wss:// |
http:// 或 https:// |
适用场景
WebSocket 适用于需要实时、高效、双向通信的应用场景,以下是一些常见的使用场景:
- 实时聊天应用:WebSocket 允许即时消息传输,不需要轮询。
- 在线多人游戏:低延迟的双向通信是多人在线游戏中的关键需求。
- 金融应用(如股票/外汇实时行情):WebSocket 提供了一个快速和可靠的通道,用于实时接收价格更新。
- 协作工具:例如 Google Docs 或其他协作编辑工具,可以实时同步编辑内容。
- 物联网(IoT):WebSocket 可以在设备与服务器之间提供持久的通信通道,用于实时数据传输。
安全性
WebSocket 支持加密通信,使用 wss://
协议(WebSocket Secure),类似于 HTTPS。ws://
和 wss://
之间的区别是,wss://
使用 SSL/TLS 加密,确保数据的传输安全。与 HTTP 不同,WebSocket 的加密和安全性更多依赖于底层的 TLS/SSL 协议。