什么是 Websocket?
WebSocket 是 HTML5 新增的协议,它实现了浏览器和服务器之间的全双工通信。在 Websocket 出现之前,为了实现即时通信,一般都是采用 Ajax 轮询或者 Comet 等技术,这些技术虽然可以实现实时通信的功能,但是都存在一些不足,比如长轮询会增加服务器的压力,而 Comet 则需要服务器开启多个连接,耗费资源。
Websocket 的出现解决了这些问题,它采用了一个长连接,可以实时地进行数据通信,而且采用的协议比较轻量,可以减小数据传输的压力。
Node.js 中实现 Websocket 长连接推送的步骤
Node.js 中可以通过 ws
库来实现 Websocket 的长连接推送,具体的实现步骤如下:
安装
ws
库:可以使用npm install ws
命令来进行安装。创建 Websocket 服务器:
const WebSocket = require('ws'); const server = new WebSocket.Server({ port: 8080 });
这里我们创建了一个 Websocket 服务器,并指定了监听的端口为 8080。
- 监听 Websocket 连接事件:
server.on('connection', (socket) => { console.log('connection'); });
这里我们监听了 connection
事件,在客户端连接成功后会触发该事件。
- 监听 Websocket 消息事件:
socket.on('message', (message) => { console.log(`received message: ${message}`); });
这里我们监听了 message
事件,在客户端发送消息后会触发该事件。
- 发送消息到客户端:
socket.send('hello world');
这里我们可以使用 send
方法将消息发送到客户端。
- 断开 Websocket 连接:
socket.close();
这里我们可以使用 close
方法来断开连接。
示例代码
下面我们来看一个简单的示例,这个示例可以实现 Websocket 长连接推送,在客户端连接成功后,会每隔 1 秒发送一个消息到客户端。
服务端代码:
-- -------------------- ---- ------- ----- --------- - -------------- ----- ------ - --- ------------------ ----- ---- --- ----------------------- -------- -- - -------------------------- -------------- -- - --------------- ------------------- -- ------ ---
客户端代码:
-- -------------------- ---- ------- --------- ----- ----- ---------- ------ ----- ---------------- ---------------- ------------ ------- ------ ---- ------------------- -------- ----- ------ - --- --------------------------------- ---------------- - -------- ------- - -------------------------------------------- - ----------- -- --------- ------- -------
在这个示例中,我们创建了一个 Websocket 服务器,并监听了客户端连接事件。在客户端连接成功后,会每隔 1 秒向客户端发送一个消息。客户端代码中我们使用 WebSocket
对象来连接到服务器,同时监听了 onmessage
事件,在接收到消息后更新了显示的内容。
总结
本文介绍了在 Node.js 中如何实现 Websocket 长连接推送的方法,并给出了一个简单的示例。Websocket 能够实现实时通信,较少了服务器的压力,是一种比较好的技术选择。在使用 Websocket 的过程中,需要注意消息的格式,同时也需要处理异常情况,例如网络连接断开等。希望本文对大家在学习 Websocket 方面有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c7e19968c7c53b0b754a4