2分钟搭建一个简单的WebSocket服务器

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。

如何用2分钟在本地搭建一个简单的 WebSocket 服务器?其实使用 Node.js,加上一些流行的库,是很容易实现的。前端同学通过自己搭建 WebSocket 服务器,对于学习 WebSocket 是很有帮助的。接下来就一起看看吧。

在 Node.js 中,你可以使用多种库来搭建 WebSocket 服务,但最常用和流行的库之一是ws。以下是一个使用ws库在 Node.js 本地搭建 WebSocket 服务的完整示例代码。

一、安装依赖

首先,你需要安装ws库。在你的项目目录中打开终端或命令提示符,并执行以下npm命令来安装它:

npm install ws

二、服务器

安装完成后,你可以创建一个新的 JavaScript 文件(例如websocket-server.js)来编写你的 WebSocket 服务器代码。

// 引入ws库
const WebSocket = require("ws");

// 创建一个WebSocket服务器,监听3000端口
const wss = new WebSocket.Server({ port: 3000 });

// 当客户端连接时
wss.on("connection", (ws) => {
  console.log("客户端已连接");

  // 当接收到客户端的消息时
  ws.on("message", (message) => {
    console.log("收到消息: %s", message);

    // 将收到的消息发送回客户端
    ws.send(`服务器: 收到消息,内容是 ${message}`);
  });

  // 当连接关闭时
  ws.on("close", () => {
    console.log("客户端已断开连接");
  });

  // 模拟发送消息到客户端
  ws.send("欢迎连接到WebSocket服务器!");
  setInterval(() => {
    ws.send(Math.random());
  }, 1000);
});

console.log("WebSocket服务器正在监听3000端口...");

接下来,你可以通过 Node.js 运行这个服务器:

node websocket-server.js

现在,你的 WebSocket 服务器已经在本地3000端口上运行了。为了测试它,你可以使用 WebSocket 客户端(如浏览器中的 JavaScript 代码)来连接到这个服务器并发送/接收消息。

三、客户端

以下是一个简单的 HTML 和 JavaScript 示例,用于在浏览器中连接到WebSocket服务器,收集服务器的消息并发送消息给服务器:

<!DOCTYPE html>
<html>
  <head>
    <title>WebSocket Test</title>
  </head>
  <body>
    <input type="text" id="messageInput" placeholder="输入消息" />
    <button onclick="sendMessage()">发送</button>
    <button onclick="closeConnection()">手动关闭连接</button>
    <div id="messages"></div>

    <script>
      // 创建WebSocket连接
      const socket = new WebSocket("ws://localhost:3000");

      // 当连接打开时
      socket.onopen = function (event) {
        console.log("连接已建立");
        socket.send("Hello Server!");
      };

      // 当接收到服务器消息时
      socket.onmessage = function (event) {
        const messages = document.getElementById("messages");
        const message = document.createElement("p");
        message.textContent = "收到: " + event.data;
        messages.appendChild(message);
      };

      // 当连接关闭时
      socket.onclose = function (event) {
        if (event.wasClean) {
          console.log("连接已正常关闭");
        } else {
          console.log("连接异常关闭");
        }
        console.log("Code: " + event.code + " Reason: " + event.reason);
      };

      // 错误处理
      socket.onerror = function (error) {
        console.error("WebSocket错误: ", error);
      };

      // 发送消息的函数
      function sendMessage() {
        const input = document.getElementById("messageInput");
        const message = input.value.trim();
        if (message) {
          socket.send(message);
          input.value = "";
        }
      }

      // 当你想关闭连接时
      function closeConnection() {
        // 调用close方法,可选地传递一个状态码和一个原因
        socket.close(1000, "客户端主动关闭连接");

        // 注意:在调用close()之后,WebSocket实例的readyState将变为CLOSED,
        // 并且你将无法再通过这个实例发送或接收消息。

        // 如果你在close()之后还想使用这个WebSocket实例进行新的连接,
        // 你需要创建一个新的WebSocket实例。
      }
    </script>
  </body>
</html>

将上面的 HTML 和 JavaScript 代码保存为一个 HTML 文件(例如websocket-client.html),然后在浏览器中打开它。你现在应该能够向你的 WebSocket 服务器发送消息,并看到服务器响应的消息。

四、预览效果

实际效果如下:
image.png
希望对好了,分享结束,谢谢点赞,下期再见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐爸muba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值