Node.js 实现 WebSocket 监听的三种方式:原生、ws 与 Socket.IO
本文详细介绍在 Node.js 中创建 WebSocket 监听的三种主要方式。首先解析基于原生 net 模块的基础实现,其次讲解使用 ws 库的标准做法,最后介绍流行的 Socket.IO 框架应用。通过对比三种方案的特点与代码示例,帮助开发者根据项目需求选择最适合的 WebSocket 通信实现方案。
WebSocket 技术概述与 Node.js 优势
WebSocket 是 HTML5 规范中引入的一项技术,旨在实现浏览器与服务器之间的全双工通信。通过 WebSocket API,客户端与服务器仅需执行一次握手(handshaking)操作,即可建立持久连接。连接建立后,双方可以直接在快速通道中互相传输数据,无需重复建立连接。
WebSocket 是一种通信协议,架构上分为服务器端和客户端。服务器端部署在后台,负责维持与客户端的长连接,从而完成双向通信任务。客户端通常集成在支持 HTML5 的浏览器内核中,通过提供 JavaScript API,允许网页应用建立 WebSocket 连接。如需了解 Java 实现方式,可参考相关 Java WebSocket 案例。
为什么选择 Node.js?
1. 事件驱动架构:利用闭包机制,可以方便地管理客户端的生命周期。 2. 避免并发复杂性:无需担心多线程环境下的锁竞争和并行计算问题。 3. 高性能引擎:V8 引擎提供了极快的执行速度。 4. 代码复用:对于游戏开发等场景,前端与后端可共用同一套游戏逻辑代码。
当然,Node.js 也存在一些局限性:
1. 版本迭代迅速:频繁的版本更新可能导致兼容性挑战。 2. 生态成熟度:相较于传统服务器技术,Node.js 尚不够成熟,大型项目案例相对较少。 3. 并发模型差异:与其他服务器不同,Node.js 不支持针对不同连接进行独立的进程或线程操作。
在享受 Node.js 带来的开发便利性的同时,必须考虑到其成熟度问题,特别是在处理“长连接”的网络通信应用时。下文将分别测试并介绍几种常见的 Node.js WebSocket 实现框架。
Node.js 实现 WebSocket 监听的三种方式
接下来,将通过三种具体方式介绍 Node.js 创建 WebSocket 监听的实现方法,详细内容如下:
第一种方式:利用 Node.js 原生模块
// 引用 net 库的方式
const net = require('net');
const server = net.createServer((socket)=>{
socket.on("connect",(data)=>{
console.log("connect");
})
});
server.listen("8111","127.0.0.1")
第二种方式:
// 使用 js 的原生方式(指 ws 库)
const WebSocketServer = require("ws").Server;
var ws = new WebSocketServer({ host: webConfig.ip, port: webConfig.port })
io.on('connection', function (socket) {
socket.on("close", function () {
console.log("server close");
});
socket.on("error", function (err) {
console.log("server error " + err);
});
socket.on("message", function (cmd, data) {
console.log("server rcv data=" + cmd);
socket.send(data);
});
});
第三种方式:
// 使用外部 socket.io 库的方式
const io = require('socket.io')(webConfig.port);
io.sockets.on('connection', function (socket) {
socket.on('getSysConf', function (data) {
console.log("get sys config ");
});
});
总结
至此,关于 Node.js 多种创建 WebSocket 监听方式的文章介绍完毕。如需了解更多 Node.js 创建 WebSocket 监听的相关内容,请搜索本站历史文章或继续浏览后续文章。感谢大家的支持!
Java和JavaScript名字像但没关系?详解两者及HTML的技术分工
2026-11-03 20:24:10
Node.js 中 CommonJS 与 ES Modules 模块规范的区别及使用
2026-11-03 15:35:13
先学JS还是先学Java?全栈开发视角的学习路径规划
2026-11-03 13:35:26
解决Node.js安装后提示“node不是内部或外部命令”
2026-11-03 08:39:43
生产环境升级 Node.js 的风险评估与 LTS 版本选择
2026-11-02 10:30:14
