Node.js 实现 WebSocket

本文介绍如何使用 Node.js 实现 WebSocket 服务器和客户端,适合初学者参考。

用 Apifox,节省研发团队的每一分钟

Node.js 实现 WebSocket

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

WebSocket 在前端的应用场景

WebSocket 是一种在客户端和服务器之间建立持续连接的协议,它提供了一种实时、双向的通信方式。在前端方面,它的主要应用场景如下:

  • 实时通信: WebSocket 可以与服务器建立持久的连接,通过它可以进行实时的消息传递,如聊天室、游戏等。
  • 实时数据更新: 对于需要实时更新数据的场景,如股票行情、快递物流信息等,通过 WebSocket 能够快速地将数据推送给客户端,实现实时更新。
  • 实时通知: 在需要告知用户的情况下,无需用户发出请求,服务器可以直接通过 WebSocket 向客户端推送通知,例如新邮件、提醒等。

Nodejs 实现 WebSocket

前端用的最多的后端语言就是 Nodejs,今天带大家使用 Nodejs 实现一个 WebSocket 服务,开始!

Nodejs 

安装插件

使用 nodejs-websocket 插件,开发人员可以在 Node.js 中创建 WebSocket 服务器和客户端。

我们需要使用 npm 进行安装:

npm init
npm i nodejs-websocket
npm i nodemon -g

我们来介绍一下这个库提供的 API:

  • createServer:创建一个 WebSocket 服务
  • on:监听事件
  • sendText:给订阅端发送信息

代码编写

我们需要创建一个 index.js 并写入以下的代码:

 // 引入nodejs-websocket
const ws = require('nodejs-websocket');
// 定义监听的host地址跟port端口
const HOST = '127.0.0.1'
const PORT = 3001;
// 创建ws服务
const service = ws.createServer((conn) => {
  conn.on('text', (message) => {
    // 当收到消息的时候就开始定时推送
    console.log('message', message);
    setInterval(() => {
      // 随机推送message里的内容
      conn.sendText(`Now is ${new Date().getTime()}`);
    }, 1 * 1000);
  });
}).listen(PORT, HOST, () => {
  console.log('service---success');
});

启动服务

最后使用命令进行启动:

node index.js

我们可以看到这样的界面,说明运行成功:

mac@MacBook-Pro % nodemon index.js
[nodemon] 2.0.12
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
service---success

前端页面连接 WebSocket

页面编写

我们需要创建一个 index.html,并写入以下代码。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script>
    window.onload = () => {
        if ('WebSocket' in window) {
            // 创建websocket连接
            let ws = new WebSocket('ws://127.0.0.1:3001/websocket');
            // 成功连接的时候推送一条消息,此时服务端就可以开始推送数据了
            ws.onopen = () => {
                console.log('websocket success---');
                ws.send('success');
            }
            ws.onmessage = (message) => {
                let data = message.data;
                console.log('get websocket message---', data);
            }
            ws.onerror = () => {
                console.error('websocket fail');
            }
        } else {
            console.error('dont support websocket');
        };
    };
</script>

</head>
<body>
  
</body>
</html>

启动页面

在 index.html 右键,并打开此文件。

启动页面

查看效果

可以看到后端先接收到前端的信息,open 建立成功。

然后建立连接后,后端一直在为前端输出信息。

查看效果

Apifox 调试 WebSocket 服务

如果你正在编写 WebSocket 服务并需要进行调试,我建议你使用一些很棒的 API 调试工具,如 Apifox,这款工具可以完美调试 WebSocket 服务~

Apifox 有 Web端 和 客户端,如果你使用的是 Web端,想要调试本地服务,需要安装:Apifox 谷歌浏览器插件

Apifox 谷歌浏览器插件

新建 WebSocket 请求

WebSocket 是客户端和服务端之间的长链接,因此你需要在 Apifox 中创建一个 WebSocket 请求,以便跳转到 Apifox 界面并填写相应的请求信息。

点击创建按钮后填入 WebSocket 服务的地址,可以选择填写 Message 和 Params。

新建 WebSocket 请求

发送消息 和 传递参数

传递 WebSocket 请求消息

在 Message 中,你可以填写要传递到服务端的消息。服务端将接收你发送的信息。

传递 WebSocket 请求消息

传递 WebSocket 请求参数

我们可以传递参数去进行请求,携带的数据类型包括 string、integer、number、array。

传递 WebSocket 请求参数

保存请求

写完所需信息之后,点击保存按钮,方便下次可继续调用。

保存请求

连接 WebSocket 请求 并 发送消息

进行 WebSocket 服务的连接

我们需要建立一个 WebSocket 请求,这样才能进行连接。连接成功之后,Apifox 有成功的提示,服务端那边也会因为连接成功,而做出响应。

进行 WebSocket 服务的连接

WebSocket 请求的发送

我们这时就可以开始跟 WebSocket 通信了,只需要点击按钮,就可以向服务端进行发送消息和参数。

WebSocket 请求的发送

WebSocket 服务的通信

一旦发送完数据,服务端也有能力向客户端发送信息。比如,我在此处配置了服务端每秒发送本地的时间戳到客户端。这就是 Apifox 所提供的 WebSocket 功能,在实际应用中非常方便~

WebSocket 服务的通信

关于 Apifox

欢迎体验一下,完全免费的哦:在线使用 Apifox

  • 集成了 API 文档、API 调试、API Mock、API 自动化测试 API 一体化协作平台
  • 拥有更先进的 API 设计/开发/测试工具
  • Apifox = Postman + Swagger + Mock + JMeter
Apifox