WebSocket 是一种全双工通信协议,可以在客户端和服务器之间建立实时、高效的连接。在前端开发中,我们通常会使用 WebSocket 来实现实时通信、推送新消息、推送即时数据等功能。在 Node.js 中,使用 WebSocket 也非常方便。
本文将介绍使用 Node.js 实现 WebSocket 的代码示例,让你了解 WebSocket 的工作原理、如何配置服务器和客户端以及如何处理消息。在本文中,我们将使用 ws 模块 来实现 WebSocket。
WebSocket 的工作原理
WebSocket 的工作原理很简单。通过一个 HTTP 起始握手,建立起一个 HTTP 协议的双工通道之后,WebSocket 客户端与服务器之间就可以进行通信。WebSocket 通信的数据都是基于 TCP 的,而与 HTTP 相比,WebSocket 通信有较低的延迟、更高的效率和更小的网络带宽消耗。
在客户端和服务器之间建立 WebSocket 通信之前,需要进行一次握手,也就是说,需要发送一个 HTTP 请求,然后服务器将回复一个头信息。这个头信息包含指示是否可以使用 WebSocket 通信的标志。如果可以使用 WebSocket,客户端将发出一个 HTTP 请求,这个请求将携带指示服务器将切换到 WebSocket 的信息。然后,服务器使用相同的信息切换到 WebSocket,就完成了全部的 WebSocket 握手流程。
首先,搭建 WebSocket 服务器
在 Node.js 中,使用 WebSocket 首先需要创建一个 WebSocket 服务器。实现的示例代码如下:
const WebSocket = require('ws'); const server = new WebSocket.Server({ port: 3000 }); server.on('connection', (socket) => { console.log('Client connected'); socket.send('Welcome to the WebSocket server'); });
这样,我们就可以在本地的 3000 端口搭建起一个 WebSocket 服务器。其中,WebSocket.Server
是用于创建 WebSocket 服务器的类。在代码中,我们还注册了 connection
事件,它将在客户端连接到服务器时触发。
socket
对象是客户端与服务器之间的 WebSocket 连接对象,它包含了客户端发送消息时所需要的方法。
在示例代码中,我们通过 socket.send()
方法向客户端发送了一条欢迎信息。
接下来,搭建 WebSocket 客户端
与搭建服务器类似,我们也需要建立一个 WebSocket 客户端。实现的示例代码如下:
-- -------------------- ---- ------- ----- --------- - -------------- ----- ------ - --- --------------------------------- ----------------- -- -- - ----------------------- -- ------ -------------- --- -------------------- ------ -- - --------------------- ------- ---- --- --------- ------ --- ------------------ -- -- - ----------------------- -- ------ --------- ---
其中,WebSocket
类是用于创建 WebSocket 客户端的类。在代码中,我们创建了一个名为 socket
的 WebSocket 客户端对象,并将其连接到了本地的 3000 端口(也就是我们刚刚搭建的 WebSocket 服务器)。
我们还监听了 open
、message
和 close
事件。它们分别在与服务器建立连接、接收到服务器发送的消息和关闭连接时触发。
最后,处理 WebSocket 消息
我们已经建立了 WebSocket 服务器和客户端,并可以在它们之间相互发送消息了。现在,我们需要对这些消息进行处理。示例代码如下:
-- -------------------- ---- ------- ----- --------- - -------------- ----- ------ - --- ------------------ ----- ---- --- ----------------------- -------- -- - ------------------- ------------ -------------------- -- --- --------- --------- -------------------- ------ -- - --------------------- ------- ---- --- --------- ------ ------------------------------- -- - -- ------- --- ------ -- ----------------- --- --------------- - ------------------ - --- --- ---
在处理 WebSocket 消息之前,我们需要知道 WebSocket.OPEN
的含义。当 WebSocket 的状态为 WebSocket.OPEN
时,表示该 WebSocket 已经成功建立连接,可以互相发送消息了。根据这个状态参数,我们可以区分 WebSocket 是否已经成功建立连接。
在示例代码中,我们处理了 message
事件,这一事件在客户端发送消息时触发。我们也通过 console.log
输出了客户端发送的消息。
在这个示例代码中,我们使用了 server.clients
这个集合,这个集合包含了所有与 WebSocket 服务器建立连结成功的客户端对象。然后,我们通过 forEach
遍历这个集合,检查这个客户端是否与发送消息的客户端不同并且状态为 WebSocket.OPEN
,如果满足条件,我们就向这个客户端发送客户端发送的消息。
总结
在本文中,我们介绍了在 Node.js 中使用 WebSocket 的示例代码。我们了解了 WebSocket 的工作原理、如何搭建 WebSocket 服务器和客户端、以及如何处理 WebSocket 消息。这样,你就可以在自己的项目中使用 WebSocket 通信了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/644f705b980a9b385b8ee8f7