本文详解Node.js中WebSocket服务的构建过程。介绍WebSocket基于TCP的全双工通信特性及轻量级协议头优势,并通过nodejs-websocket包提供服务端与客户端的完整代码示例,展示消息收发与定时发送机制,帮助开发者快速掌握WebSocket在Node.js环境下的实际应用。
WebSocket简介
自HTML5标准引入以来,WebSocket提供了一种在单一TCP连接上实现全双工通信的协议机制。
该协议具备以下核心特征:
- 基于TCP协议,客户端与服务器仅需建立一次连接即可保持通信。
- 支持服务器端主动向客户端推送消息,无需客户端发起请求。
- 采用二进制帧结构,不包含HTTP/2的多路复用或优先级调度等功能。
- 拥有更轻量的协议头部,从而有效降低数据传输开销。
- WebSocket的握手阶段报文格式需严格遵循HTTP报文规范。
客户端和服务端的简单实现
服务端
在本例中,服务端采用nodejs-websocket模块进行开发。
const ws = require("nodejs-websocket");
const server = ws.createServer(function (socket) {
// 读取字符串消息,事件名称为:text
var count = 1;
socket.on("text", function (str) {
// 在控制台输出前端传来的消息
console.log(str);
//向前端回复消息
setInterval(() => {
socket.sendText("服务器端收到客户端发来的消息" + str + count++);
}, 2000);
});
socket.on("error", () => {
console.log("err");
});
});
server.listen(3000, () => {
console.log("connected...");
});该模块将读取到的字符串消息映射为text事件,并通过sendText()方法向客户端发送字符串数据。
关于其他可用方法和事件,建议查阅相关源码文档。
执行上述代码即可启动WebSocket服务。
客户端
const WebSocket = require("ws");
const ws = new WebSocket("ws://localhost:3000/");
ws.onopen = function () {
setInterval(function () {
ws.send("客户端消息");
}, 2000);
};
ws.onmessage = function (e) {
console.log(e.data);
};此段客户端代码可直接在浏览器环境中运行,无需额外引入ws包。
通过定时器模拟实时消息发送,以便观察客户端与服务端之间的双向通信流程。
总结
以上内容为个人实践经验总结,旨在提供参考,欢迎支持本站。