跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.jsAI大前端

AI 辅助开发:Node.js WebSocket 内网穿透系统搭建

综述由AI生成基于 Node.js 和 WebSocket 构建智能终端管理系统的实战过程。内容涵盖环境搭建、FRP 内网穿透配置、利用 AI 辅助生成代码、前后端分离架构实现以及现代化 UI 设计。通过具体的代码示例,演示了如何搭建 HTTP 静态服务与 WebSocket 数据转发服务器,并实现了前端实时连接管理与日志监控功能,适合快速原型开发。

DevOpsTeam发布于 2026/4/10更新于 2026/5/2219 浏览
AI 辅助开发:Node.js WebSocket 内网穿透系统搭建

环境准备

在开始之前,我们需要准备好基础的开发环境。请确保已安装 Node.js(建议 v14.0 以上版本)和 Python。此外,为了实现内网穿透,你需要下载并配置一个 FRP 客户端(如 frpc),这能让你从外网访问本地服务。

利用 AI 加速开发流程

现代 AI 编程助手能极大提升原型开发效率。你可以尝试向 AI 描述你的需求,例如:

"我需要写一个智能头盔管理系统,前后端分离。后端用 Node.js,接口清晰;前端不用框架,纯 HTML/JS/CSS,文件独立。第一步先搭建 WebSocket 服务器,支持前端自定义地址连接,默认逻辑是接收数据后转发。"

不同的工具(如 Cursor、Codex 等)可能有细微差别,但核心思路一致:明确技术栈和业务逻辑。

项目结构规划

合理的目录结构能让维护更简单。我们可以按以下布局组织代码:

helmet-system/
├── package.json          # 项目配置
├── node_modules/         # 依赖库
├── backend/              # 后端代码
│   └── server.js         # 核心服务器
└── frontend/             # 前端代码
    ├── index.html        # 页面结构
    ├── style.css         # 样式表
    └── script.js         # 交互逻辑

初始化与依赖安装

在项目根目录下打开终端,执行以下命令初始化项目并安装必要的 WebSocket 库:

npm init -y
npm install ws

这里我们只引入了 ws 作为唯一的外部依赖,保持项目轻量。

后端实现:HTTP 与 WebSocket 共存

后端的核心任务是同时提供静态网页服务和实时数据转发。下面是一个极简的 server.js 实现:

const http = require('http');
const fs = require('fs');
const path = require('path');
const WebSocket = require('ws');

const PORT = 8080;

// 文件类型映射
const  = {
  : ,
  : ,
  : ,
  : 
};


 server = http.( {
   filePath = req. ===  ?  : req.;
   fullPath = path.(__dirname, , filePath);
   extname = path.(fullPath);
   contentType = [extname] || ;

  fs.(fullPath,  {
     (err) {
       (err. === ) {
        res.();
        res.();
      }  {
        res.();
        res.();
      }
    }  {
      res.(, { : contentType });
      res.(content, );
    }
  });
});


 wss =  .({ server });
wss.(,  {
   ip = req..;
  .();

  ws.(,  {
     msgString = message.();
    .();
    
    wss..( {
       (client !== ws && client. === .) {
        client.(msgString);
      }
    });
  });
});


server.(,  {
  .();
  .();
  .();
  .();
});
MIME_TYPES
'.html'
'text/html'
'.css'
'text/css'
'.js'
'text/javascript'
'.json'
'application/json'
// 1. 创建 HTTP 服务器 (负责让浏览器能看到网页)
const
createServer
(req, res) =>
let
url
'/'
'index.html'
url
const
join
'../frontend'
const
extname
const
MIME_TYPES
'text/plain'
readFile
(err, content) =>
if
if
code
'ENOENT'
writeHead
404
end
'404 Not Found'
else
writeHead
500
end
`Server Error: ${err.code}`
else
writeHead
200
'Content-Type'
end
'utf-8'
// 2. 创建 WebSocket 服务器 (负责数据实时转发)
const
new
WebSocket
Server
on
'connection'
(ws, req) =>
const
socket
remoteAddress
console
log
`[WebSocket] 新连接:${ip}`
on
'message'
(message) =>
const
toString
console
log
`[转发数据] ${msgString}`
// 收到消息,直接转发给其他人
clients
forEach
(client) =>
if
readyState
WebSocket
OPEN
send
// 3. 启动服务
listen
PORT
() =>
console
log
`-----------------------------------`
console
log
`服务器已启动!`
console
log
`请在浏览器打开:http://127.0.0.1:${PORT}`
console
log
`-----------------------------------`

这段代码做了两件事:一是通过 http.createServer 托管前端静态文件,二是挂载 WebSocket.Server 处理实时通信。注意 path.join 的使用,它确保了跨平台路径的正确性。

前端界面与交互逻辑

前端部分采用了现代化的设计语言,参考了苹果系统的视觉风格,强调流畅的动效和清晰的层级。

HTML 结构 (index.html)

页面包含导航栏、状态指示器、连接设置区以及数据日志区。为了保持简洁,我们将 CSS 和 JS 分离到独立文件中。

样式美化 (style.css)

使用 CSS 变量定义主题色,配合 backdrop-filter 实现毛玻璃效果。动画过渡设置为 0.3s ease,保证交互手感细腻。

脚本逻辑 (script.js)

核心在于 WebSocket 的连接管理。当用户点击"连接系统"时,脚本会尝试建立连接,并根据状态更新 UI(如按钮颜色、连接提示)。

关键逻辑包括:

  • 自动填充:加载时自动填入当前主机 IP 和端口。
  • 状态切换:连接成功时禁用输入框,断开时恢复。
  • 消息渲染:将收到的数据以聊天气泡的形式展示,并附带时间戳。
let ws = null;

// DOM 元素获取
const inputs = {
  ip: document.getElementById('serverIp'),
  port: document.getElementById('serverPort'),
  msg: document.getElementById('msgInput')
};
const btnConnect = document.getElementById('btnConnect');
const btnSend = document.getElementById('btnSend');
const logArea = document.getElementById('logArea');
const statusText = document.getElementById('statusText');
const statusDot = document.getElementById('statusDot');

// 自动填充当前地址
window.onload = () => {
  inputs.ip.value = window.location.hostname;
  inputs.port.value = window.location.port;
};

// 事件监听
btnConnect.addEventListener('click', toggleConnection);
btnSend.addEventListener('click', sendMessage);

// 核心逻辑
function toggleConnection() {
  if (ws) {
    ws.close();
    return;
  }
  const ip = inputs.ip.value;
  const port = inputs.port.value;
  const url = `ws://${ip}:${port}`;

  try {
    ws = new WebSocket(url);
    ws.onopen = () => {
      updateUIState(true);
      logToSystem('连接成功');
    };
    ws.onmessage = (event) => {
      logMessage(event.data, 'received');
    };
    ws.onclose = () => {
      updateUIState(false);
      ws = null;
      logToSystem('服务器连接已断开');
    };
    ws.onerror = () => {
      updateUIState(false);
      statusDot.className = 'status-dot error';
      statusText.innerText = '连接错误';
      logToSystem('连接发生错误,请检查网络');
    };
  } catch (e) {
    logToSystem('URL 格式错误');
  }
}

function sendMessage() {
  if (ws && ws.readyState === WebSocket.OPEN) {
    const msg = inputs.msg.value;
    if (!msg) return;
    ws.send(msg);
    logMessage(msg, 'sent');
  }
}

function updateUIState(isConnected) {
  if (isConnected) {
    statusText.innerText = 'System Online';
    statusDot.className = 'status-dot online';
    btnConnect.innerHTML = '<span>断开连接</span>';
    btnConnect.style.background = '#ff3b30';
    btnSend.disabled = false;
    inputs.ip.disabled = true;
    inputs.port.disabled = true;
  } else {
    statusText.innerText = '未连接服务器';
    statusDot.className = 'status-dot offline';
    btnConnect.innerHTML = '<span>连接系统</span>';
    btnConnect.style.background = '';
    btnSend.disabled = true;
    inputs.ip.disabled = false;
    inputs.port.disabled = false;
  }
}

function logMessage(text, type) {
  const div = document.createElement('div');
  const time = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });
  div.className = `msg-bubble ${type === 'sent' ? 'msg-sent' : 'msg-received'}`;
  div.innerHTML = `${text}<span>${time}</span>`;
  logArea.appendChild(div);
  scrollToBottom();
}

function logToSystem(text) {
  const div = document.createElement('div');
  div.className = 'system-msg';
  div.innerText = text;
  logArea.appendChild(div);
  scrollToBottom();
}

function scrollToBottom() {
  logArea.scrollTo({ top: logArea.scrollHeight, behavior: 'smooth' });
}

部署与测试

完成上述步骤后,运行 node backend/server.js 启动服务。此时你可以通过浏览器访问本地页面,并通过 FRP 工具将端口映射到公网,即可实现真正的内网穿透访问。整个流程展示了如何利用现代工具链快速构建一个具备实时通信能力的 Web 应用。

目录

  1. 环境准备
  2. 利用 AI 加速开发流程
  3. 项目结构规划
  4. 初始化与依赖安装
  5. 后端实现:HTTP 与 WebSocket 共存
  6. 前端界面与交互逻辑
  7. HTML 结构 (index.html)
  8. 样式美化 (style.css)
  9. 脚本逻辑 (script.js)
  10. 部署与测试
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Windows 系统常用 CMD 命令大全(108 个)
  • Java 网络编程:Socket 套接字基础与实现
  • Spring Cloud Gateway 统一服务入口实战
  • KoboldAI 本地部署与配置指南
  • 数据结构与算法:合并链表、链表分割及回文结构
  • Python 爬虫基础教程:从原理到反爬策略
  • 《大模型应用开发极简入门》:基于 GPT-4 和 ChatGPT 的 Python 实践
  • Git 版本管理基础与常用命令
  • FastGPT 结合 MCP 协议实现工具增强型智能体构建
  • Claude Code Superpowers:让 AI 像资深工程师一样工作
  • Qt 与 Web 混合编程:CEF 与 QCefView 实战详解
  • 基于 FastGPT 与 MCP 协议构建工具增强型智能体
  • ROS2 + Gazebo + PX4 环境搭建与无人机起飞实战
  • C 语言与 Python 的核心区别及应用场景对比
  • Visual C++ Redistributable 安装失败修复指南
  • Stable Diffusion 3.5 FP8 模型架构解析与优化技巧
  • FastGPT 集成 MCP 协议构建工具增强型智能体
  • Java 基础面试高频问题深度解析
  • JavaScript 前端开发基础入门与 DOM 操作详解
  • 智谱 GLM-4-9B-Chat 模型部署与认知微调实战

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online