WebSocket 协议 (The WebSocket protocol) 提供了一种在客户端和服务器之间通过单个持久连接进行数据交换的方式。数据可以在两个方向上以低延迟和低开销进行传输,而无需断开连接。这意味着服务器可以独立地向客户端发送数据,而无需客户端首先发起请求,反之亦然。
WebSocket 非常适合在 Web 应用中构建实时功能,例如在线游戏、聊天应用,或者用于传输金融交易数据、物联网 (IoT) 传感器数据等。根据 Postman 的《2022 年 API 现状报告》,有 26% 的受访者正在使用 WebSocket,越来越多的开发者正在 Postman 中探索 WebSocket API。
在本教程中,我们将创建一个 WebSocket 服务器,并使用 Postman 在该连接上发送和接收消息。
准备工作
在开始之前,请确保你的开发环境中已安装以下工具:
创建 Node.js 服务器
首先,我们需要创建一个项目目录并初始化 Node.js 项目。
-
打开你的终端,创建一个名为
websockets的新目录:mkdir websockets -
进入该目录:
cd websockets -
接下来,安装
ws,这是一个流行的 Node.js WebSocket 库:npm install ws这个命令会自动初始化一个 Node.js 项目,并创建一个
package.json文件来管理项目依赖。 -
使用你喜欢的文本编辑器(如 VSCode)打开
websockets目录。你会看到项目文件结构如下:node_modules/package-lock.jsonpackage.json
-
打开
package.json文件,添加"type": "module",以便我们可以在下一步中使用 ES 模块语法。修改后的package.json文件应如下所示:{ "type": "module", "dependencies": { "ws": "^8.12.0" } } -
在项目根目录下,创建一个名为
index.js的文件,并粘贴以下来自ws官方文档的 “简单服务器” 示例代码。这段代码会初始化一个 WebSocket 服务器。当客户端与服务器建立连接后,服务器会向客户端发送一条消息 “something”:import { WebSocketServer } from 'ws'; const wss = new WebSocketServer({ port: 8080 }); wss.on('connection', function connection(ws) { ws.on('message', function message(data) { console.log('received: %s', data); }); ws.send('something'); }); -
现在,我们可以在命令行中运行我们的服务器了:
node index.js
使用 Postman 测试 WebSocket 通信
服务器运行起来后,我们可以使用 Postman 来连接并测试它。
-
在 Postman 中,选择 New > WebSocket Request 来打开一个新的 WebSocket 请求标签页。
-
输入 WebSocket 服务器的 URL。WebSocket URL 以
ws://或wss://开头。由于我们的服务器运行在本地的 8080 端口,所以 URL 是ws://localhost:8080。 -
点击 Connect。
连接成功后,Postman 的 Messages 窗格会显示此 WebSocket 连接的所有消息,包括传入、传出和网络消息。你可以看到服务器在你连接成功后立即发送了 “something” 消息。你还可以点击 “Connected to ws://localhost:8080” 查看连接的握手(handshake)详情。
我们建立的连接是双向的,这意味着除了接收消息,我们也可以发送消息。
- 在下方的 Message 撰写区,输入你自己的消息(例如 “Hello from Postman!"),然后点击 Send。
你可以在 Messages 窗格中看到你刚刚发送的传出消息。同时,回到运行服务器的终端,你会看到服务器打印出了接收到的消息:
received: Hello from Postman!
这证明了客户端与服务器之间的双向通信已经成功建立。
升级服务器:实时发送系统信息
接下来,让我们对服务器进行一些升级,让它发送更有趣的数据,比如我们计算机的实时系统信息。我们将使用 systeminformation 这个 Node.js 包。
-
首先,在终端中按
Ctrl + C停止正在运行的服务器,然后安装新包:npm install systeminformation -
接下来,修改
index.js文件,在文件顶部导入systeminformation包:import si from "systeminformation"; -
在
ws.send('something');这行代码之后,添加以下代码。这段代码会每隔 1000 毫秒(1秒)获取一次当前的 CPU 负载信息,并将其发送给客户端:setInterval(async () => { const cpuLoad = JSON.stringify(await si.currentLoad()); ws.send(cpuLoad); }, 1000); -
保存你的修改,并从命令行重启本地服务器:
node index.js -
返回 Postman,再次点击 Connect 连接到本地服务器。这一次,你会看到服务器每秒都在向你发送关于 CPU 信息的 JSON 数据流!
点击其中一条消息,可以展开查看从服务器发送过来的详细数据。消息会持续不断地发送,直到你点击 Disconnect 来断开连接。
现在我们已经有了一个功能完备的 WebSocket 服务器,你可以尝试做更多有趣的事情:
- 减慢消息频率:尝试将
1000毫秒更新为3000毫秒,看看消息发送频率如何变化。 - 发送特定数据:修改代码,不再发送所有数据,而是只发送平均负载
avgLoad。你可能需要先在 Postman 中查看完整的消息结构,以便正确地解析和提取数据。
我们还可以编写更多代码来定制我们的本地应用。例如,当从客户端收到特定消息时,服务器可以不仅仅是打印日志,还可以从其他数据源检索数据或执行计算,然后将结果发送回客户端。
更多资源
想深入了解 WebSocket 和 Postman 的更多用法,可以参考以下资源:
- 视频教程: 在 Postman 中使用 WebSocket
- Postman Quickstarts: WebSocket with Node.js 指南
- 公共工作区: Postman WebSockets 指南集合
- 官方文档: 使用 WebSocket 请求
在下一篇文章中,我们将探讨如何将 WebSocket 服务器与物联网 (IoT) 设备结合使用。欢迎在评论中告诉我们你想了解什么样的项目,以及你正在用 WebSocket 做些什么。
关于
关注我获取更多资讯